mns-scheduler 1.4.3.0__py3-none-any.whl → 1.4.3.5__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.
- mns_scheduler/zb/stock_zb_pool_sync.py +1 -1
- mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +244 -65
- mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +4 -1
- {mns_scheduler-1.4.3.0.dist-info → mns_scheduler-1.4.3.5.dist-info}/METADATA +1 -1
- {mns_scheduler-1.4.3.0.dist-info → mns_scheduler-1.4.3.5.dist-info}/RECORD +7 -7
- {mns_scheduler-1.4.3.0.dist-info → mns_scheduler-1.4.3.5.dist-info}/WHEEL +0 -0
- {mns_scheduler-1.4.3.0.dist-info → mns_scheduler-1.4.3.5.dist-info}/top_level.txt +0 -0
|
@@ -20,6 +20,11 @@ import mns_common.component.em.em_real_time_quotes_api as em_real_time_quotes_ap
|
|
|
20
20
|
from datetime import datetime
|
|
21
21
|
import mns_common.api.ths.zt.ths_stock_zt_pool_api as ths_stock_zt_pool_api
|
|
22
22
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
23
|
+
import mns_common.component.deal.deal_service_api as deal_service_api
|
|
24
|
+
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
|
|
23
28
|
|
|
24
29
|
'''
|
|
25
30
|
东方财富涨停池
|
|
@@ -49,13 +54,22 @@ ZT_FIELD = ['_id', 'symbol', 'name', 'now_price', 'chg', 'first_closure_time',
|
|
|
49
54
|
|
|
50
55
|
def save_zt_info(str_day):
|
|
51
56
|
if bool(1 - trade_date_common_service_api.is_trade_day(str_day)):
|
|
52
|
-
return
|
|
57
|
+
return pd.DataFrame()
|
|
53
58
|
|
|
54
59
|
stock_em_zt_pool_df_data = stock_zt_pool_api.stock_em_zt_pool_df(
|
|
55
60
|
date_handle_util.no_slash_date(str_day))
|
|
56
61
|
|
|
57
62
|
# fix 涨停池没有的股票
|
|
58
|
-
stock_em_zt_pool_df_data =
|
|
63
|
+
stock_em_zt_pool_df_data = handle_miss_zt_data(stock_em_zt_pool_df_data.copy(), str_day)
|
|
64
|
+
|
|
65
|
+
try:
|
|
66
|
+
# 同花顺问财涨停池
|
|
67
|
+
ths_zt_pool_df_data = ths_stock_zt_pool_v2_api.get_ths_stock_zt_reason_with_cache(str_day)
|
|
68
|
+
except BaseException as e:
|
|
69
|
+
logger.error("使用问财同步ths涨停数据异常")
|
|
70
|
+
ths_zt_pool_df_data = pd.DataFrame()
|
|
71
|
+
|
|
72
|
+
stock_em_zt_pool_df_data = handle_ths_em_diff_data(ths_zt_pool_df_data, stock_em_zt_pool_df_data)
|
|
59
73
|
|
|
60
74
|
stock_em_zt_pool_df_data = common_service_fun_api.total_mv_classification(stock_em_zt_pool_df_data.copy())
|
|
61
75
|
|
|
@@ -64,68 +78,16 @@ def save_zt_info(str_day):
|
|
|
64
78
|
stock_em_zt_pool_df_data = common_service_fun_api.symbol_amount_simple(stock_em_zt_pool_df_data.copy())
|
|
65
79
|
|
|
66
80
|
stock_em_zt_pool_df_data = company_common_service_api.amendment_industry(stock_em_zt_pool_df_data.copy())
|
|
81
|
+
|
|
67
82
|
# 主线标记 复盘用
|
|
68
83
|
stock_em_zt_pool_df_data['main_line'] = '无'
|
|
69
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
|
+
|
|
70
88
|
# 上个交易交易日涨停股票
|
|
71
89
|
last_trade_day_zt_df = zt_common_service_api.get_last_trade_day_zt(str_day)
|
|
72
90
|
|
|
73
|
-
try:
|
|
74
|
-
# 同花顺问财涨停池
|
|
75
|
-
ths_zt_pool_df_data = ths_stock_zt_pool_v2_api.get_ths_stock_zt_reason_with_cache(str_day)
|
|
76
|
-
|
|
77
|
-
# del stock_em_zt_pool_df_data['ths_concept_name']
|
|
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
|
-
|
|
82
|
-
for stock_one in stock_em_zt_pool_df_data.itertuples():
|
|
83
|
-
try:
|
|
84
|
-
|
|
85
|
-
# 设置连板数目
|
|
86
|
-
stock_em_zt_pool_df_data = set_connected_boards_numbers(stock_em_zt_pool_df_data.copy(),
|
|
87
|
-
stock_one.symbol,
|
|
88
|
-
last_trade_day_zt_df.copy())
|
|
89
|
-
|
|
90
|
-
ths_zt_pool_one_df = ths_zt_pool_df_data.loc[ths_zt_pool_df_data['symbol'] == stock_one.symbol]
|
|
91
|
-
if data_frame_util.is_empty(ths_zt_pool_one_df):
|
|
92
|
-
stock_em_zt_pool_df_data['zt_reason'] = '0'
|
|
93
|
-
continue
|
|
94
|
-
stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'zt_reason'] = \
|
|
95
|
-
list(ths_zt_pool_one_df['zt_reason'])[0]
|
|
96
|
-
|
|
97
|
-
first_closure_time = list(ths_zt_pool_one_df['first_closure_time'])[0]
|
|
98
|
-
first_closure_time = first_closure_time.replace(":", "")
|
|
99
|
-
|
|
100
|
-
stock_em_zt_pool_df_data.loc[
|
|
101
|
-
stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'first_closure_time'] = first_closure_time
|
|
102
|
-
|
|
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
|
-
|
|
111
|
-
stock_em_zt_pool_df_data.loc[
|
|
112
|
-
stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'zt_analysis'] = zt_analysis
|
|
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]
|
|
123
|
-
except BaseException as e:
|
|
124
|
-
stock_em_zt_pool_df_data['zt_reason'] = '0'
|
|
125
|
-
logger.error("出现异常:{}", e)
|
|
126
|
-
except BaseException as e:
|
|
127
|
-
stock_em_zt_pool_df_data['zt_reason'] = '0'
|
|
128
|
-
logger.error("出现异常:{}", e)
|
|
129
91
|
stock_em_zt_pool_df_data['first_closure_time'] = stock_em_zt_pool_df_data['first_closure_time'].str.strip()
|
|
130
92
|
stock_em_zt_pool_df_data['list_date'] = stock_em_zt_pool_df_data['list_date'].apply(
|
|
131
93
|
lambda x: pd.to_numeric(x, errors="coerce"))
|
|
@@ -150,25 +112,115 @@ def save_zt_info(str_day):
|
|
|
150
112
|
|
|
151
113
|
stock_em_zt_pool_df_data['str_day'] = str_day
|
|
152
114
|
stock_em_zt_pool_df_data['_id'] = stock_em_zt_pool_df_data['symbol'] + "_" + str_day
|
|
115
|
+
stock_em_zt_pool_df_data.drop_duplicates('symbol', keep='last', inplace=True)
|
|
153
116
|
|
|
154
|
-
|
|
117
|
+
query_today_zt = {'str_day': str_day}
|
|
155
118
|
|
|
156
|
-
|
|
119
|
+
stock_exist_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query_today_zt)
|
|
120
|
+
|
|
121
|
+
if data_frame_util.is_empty(stock_exist_zt_pool_df):
|
|
122
|
+
|
|
123
|
+
today_new_zt_pool_df = stock_em_zt_pool_df_data.copy()
|
|
124
|
+
else:
|
|
125
|
+
today_new_zt_pool_df = stock_em_zt_pool_df_data.loc[
|
|
126
|
+
~stock_em_zt_pool_df_data['symbol'].isin(stock_exist_zt_pool_df['symbol'])]
|
|
157
127
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
mongodb_util.
|
|
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
|
+
|
|
206
|
+
stock_em_zt_pool_df_data = pd.concat([stock_exist_zt_pool_df, today_new_zt_pool_df])
|
|
207
|
+
stock_em_zt_pool_df_data.fillna('', inplace=True)
|
|
208
|
+
stock_em_zt_pool_df_data = stock_em_zt_pool_df_data[ZT_FIELD]
|
|
161
209
|
return stock_em_zt_pool_df_data
|
|
162
210
|
|
|
163
211
|
|
|
164
212
|
# 设置连板数目
|
|
165
213
|
def set_connected_boards_numbers(stock_em_zt_pool_df_data, symbol, last_trade_day_zt_df):
|
|
214
|
+
# 连板股票
|
|
166
215
|
connected_boards_df_copy = last_trade_day_zt_df.loc[
|
|
167
216
|
last_trade_day_zt_df['symbol'].isin(stock_em_zt_pool_df_data['symbol'])]
|
|
217
|
+
|
|
168
218
|
connected_boards_df = connected_boards_df_copy.copy()
|
|
169
219
|
connected_boards_df['connected_boards_numbers'] = connected_boards_df['connected_boards_numbers'] + 1
|
|
170
220
|
|
|
221
|
+
# 连板股票
|
|
171
222
|
connected_boards_df_one = connected_boards_df.loc[connected_boards_df['symbol'] == symbol]
|
|
223
|
+
|
|
172
224
|
if data_frame_util.is_not_empty(connected_boards_df_one):
|
|
173
225
|
stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'connected_boards_numbers'] = \
|
|
174
226
|
list(connected_boards_df_one['connected_boards_numbers'])[0]
|
|
@@ -184,7 +236,7 @@ def set_connected_boards_numbers(stock_em_zt_pool_df_data, symbol, last_trade_da
|
|
|
184
236
|
return stock_em_zt_pool_df_data
|
|
185
237
|
|
|
186
238
|
|
|
187
|
-
def
|
|
239
|
+
def handle_miss_zt_data(stock_em_zt_pool_df_data, str_day):
|
|
188
240
|
now_date = datetime.now()
|
|
189
241
|
now_day = now_date.strftime('%Y-%m-%d')
|
|
190
242
|
if now_day == str_day:
|
|
@@ -240,8 +292,135 @@ def sync_miss_zt_data(stock_em_zt_pool_df_data, str_day):
|
|
|
240
292
|
return stock_em_zt_pool_df_data
|
|
241
293
|
|
|
242
294
|
|
|
295
|
+
def handle_ths_em_diff_data(ths_zt_pool_df_data, stock_em_zt_pool_df_data):
|
|
296
|
+
if data_frame_util.is_empty(ths_zt_pool_df_data):
|
|
297
|
+
return stock_em_zt_pool_df_data
|
|
298
|
+
else:
|
|
299
|
+
diff_ths_zt_df = ths_zt_pool_df_data.loc[
|
|
300
|
+
~(ths_zt_pool_df_data['symbol'].isin(stock_em_zt_pool_df_data['symbol']))]
|
|
301
|
+
if data_frame_util.is_empty(diff_ths_zt_df):
|
|
302
|
+
return stock_em_zt_pool_df_data
|
|
303
|
+
else:
|
|
304
|
+
diff_ths_zt_df = diff_ths_zt_df[[
|
|
305
|
+
'symbol',
|
|
306
|
+
'name',
|
|
307
|
+
'chg',
|
|
308
|
+
'now_price',
|
|
309
|
+
# 'amount',
|
|
310
|
+
# 'flow_mv',
|
|
311
|
+
# 'total_mv',
|
|
312
|
+
# 'exchange',
|
|
313
|
+
'closure_funds',
|
|
314
|
+
'first_closure_time',
|
|
315
|
+
'last_closure_time',
|
|
316
|
+
'frying_plates_numbers',
|
|
317
|
+
'statistics',
|
|
318
|
+
'connected_boards_numbers'
|
|
319
|
+
|
|
320
|
+
]]
|
|
321
|
+
|
|
322
|
+
company_info_df = query_company_info_with_share()
|
|
323
|
+
company_info_df['symbol'] = company_info_df['_id']
|
|
324
|
+
company_info_df = company_info_df.loc[company_info_df['symbol'].isin(list(diff_ths_zt_df['symbol']))]
|
|
325
|
+
|
|
326
|
+
company_info_df = common_service_fun_api.add_after_prefix(company_info_df)
|
|
327
|
+
|
|
328
|
+
symbol_prefix_list = list(company_info_df['symbol_prefix'])
|
|
329
|
+
real_time_quotes_list = deal_service_api.get_qmt_real_time_quotes_detail('qmt',
|
|
330
|
+
symbol_prefix_list)
|
|
331
|
+
|
|
332
|
+
real_time_quotes_df = pd.DataFrame(real_time_quotes_list)
|
|
333
|
+
|
|
334
|
+
real_time_quotes_df['symbol'] = real_time_quotes_df['symbol'].str.slice(0, 6)
|
|
335
|
+
company_info_df = company_info_df.set_index(['symbol'], drop=True)
|
|
336
|
+
real_time_quotes_df = real_time_quotes_df.set_index(['symbol'], drop=False)
|
|
337
|
+
|
|
338
|
+
real_time_quotes_df = pd.merge(company_info_df, real_time_quotes_df, how='outer',
|
|
339
|
+
left_index=True, right_index=True)
|
|
340
|
+
|
|
341
|
+
real_time_quotes_df['amount'] = round(real_time_quotes_df['amount'], 1)
|
|
342
|
+
|
|
343
|
+
real_time_quotes_df['total_mv'] = round(
|
|
344
|
+
real_time_quotes_df['lastPrice'] * real_time_quotes_df['total_share'], 1)
|
|
345
|
+
real_time_quotes_df['flow_mv'] = round(real_time_quotes_df['lastPrice'] * real_time_quotes_df['flow_share'],
|
|
346
|
+
1)
|
|
347
|
+
real_time_quotes_df['exchange'] = round(
|
|
348
|
+
real_time_quotes_df['amount'] * 100 / real_time_quotes_df['flow_mv'], 1)
|
|
349
|
+
|
|
350
|
+
real_time_quotes_df = real_time_quotes_df[
|
|
351
|
+
['symbol', 'amount', 'total_mv', 'flow_mv', 'exchange', 'industry']]
|
|
352
|
+
|
|
353
|
+
real_time_quotes_df = real_time_quotes_df.set_index(['symbol'], drop=True)
|
|
354
|
+
diff_ths_zt_df = diff_ths_zt_df.set_index(['symbol'], drop=False)
|
|
355
|
+
diff_ths_zt_df = pd.merge(real_time_quotes_df, diff_ths_zt_df, how='outer',
|
|
356
|
+
left_index=True, right_index=True)
|
|
357
|
+
|
|
358
|
+
diff_ths_zt_df = diff_ths_zt_df[[
|
|
359
|
+
'symbol',
|
|
360
|
+
'name',
|
|
361
|
+
'chg',
|
|
362
|
+
'now_price',
|
|
363
|
+
'amount',
|
|
364
|
+
'flow_mv',
|
|
365
|
+
'total_mv',
|
|
366
|
+
'exchange',
|
|
367
|
+
'closure_funds',
|
|
368
|
+
'first_closure_time',
|
|
369
|
+
'last_closure_time',
|
|
370
|
+
'frying_plates_numbers',
|
|
371
|
+
'statistics',
|
|
372
|
+
'connected_boards_numbers',
|
|
373
|
+
'industry'
|
|
374
|
+
|
|
375
|
+
]]
|
|
376
|
+
|
|
377
|
+
exist_number = stock_em_zt_pool_df_data.shape[0] + 1
|
|
378
|
+
|
|
379
|
+
diff_ths_zt_df.index = range(exist_number, exist_number + len(diff_ths_zt_df))
|
|
380
|
+
diff_ths_zt_df['index'] = diff_ths_zt_df.index
|
|
381
|
+
|
|
382
|
+
stock_em_zt_pool_df_data = pd.concat([stock_em_zt_pool_df_data, diff_ths_zt_df])
|
|
383
|
+
return stock_em_zt_pool_df_data
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
def query_company_info_with_share():
|
|
387
|
+
query_field = {"_id": 1,
|
|
388
|
+
"industry": 1,
|
|
389
|
+
"company_type": 1,
|
|
390
|
+
"ths_industry_code": 1,
|
|
391
|
+
"ths_concept_name": 1,
|
|
392
|
+
"ths_concept_code": 1,
|
|
393
|
+
"ths_concept_sync_day": 1,
|
|
394
|
+
"first_sw_industry": 1,
|
|
395
|
+
"second_sw_industry": 1,
|
|
396
|
+
"second_industry_code": 1,
|
|
397
|
+
"third_sw_industry": 1,
|
|
398
|
+
"mv_circulation_ratio": 1,
|
|
399
|
+
"list_date": 1,
|
|
400
|
+
"diff_days": 1,
|
|
401
|
+
'em_industry': 1,
|
|
402
|
+
'operate_profit': 1,
|
|
403
|
+
'total_operate_income': 1,
|
|
404
|
+
"name": 1,
|
|
405
|
+
'pb': 1,
|
|
406
|
+
'pe_ttm': 1,
|
|
407
|
+
'ROE': 1,
|
|
408
|
+
'ths_industry_name': 1,
|
|
409
|
+
'total_share': 1,
|
|
410
|
+
'flow_share': 1
|
|
411
|
+
}
|
|
412
|
+
de_list_company_symbols = company_common_service_new_api.get_de_list_company()
|
|
413
|
+
query_field_key = str(query_field)
|
|
414
|
+
query = {"_id": {"$regex": "^[^48]"},
|
|
415
|
+
'symbol': {"$nin": de_list_company_symbols}, }
|
|
416
|
+
query_key = str(query)
|
|
417
|
+
company_info_df = company_common_service_new_api.get_company_info_by_field(query_key, query_field_key)
|
|
418
|
+
|
|
419
|
+
return company_info_df
|
|
420
|
+
|
|
421
|
+
|
|
243
422
|
if __name__ == '__main__':
|
|
244
|
-
save_zt_info('2025-11-
|
|
423
|
+
save_zt_info('2025-11-18')
|
|
245
424
|
# from datetime import datetime
|
|
246
425
|
#
|
|
247
426
|
# if __name__ == '__main__':
|
|
@@ -11,6 +11,7 @@ mongodb_util = MongodbUtil('27017')
|
|
|
11
11
|
import mns_common.api.ths.zt.ths_stock_zt_pool_api as ths_stock_zt_pool_api
|
|
12
12
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
13
13
|
from loguru import logger
|
|
14
|
+
import time
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
def update_null_zt_reason(str_day):
|
|
@@ -38,6 +39,8 @@ def update_null_zt_reason(str_day):
|
|
|
38
39
|
stock_zt_pool_df_null_zt_reason['symbol'] == stock_zt_one.symbol]
|
|
39
40
|
# 涨停分析
|
|
40
41
|
zt_result_dict = ths_stock_zt_pool_api.zt_analyse_reason(stock_zt_one.symbol)
|
|
42
|
+
time.sleep(5)
|
|
43
|
+
|
|
41
44
|
zt_analysis = zt_result_dict['zt_analyse_detail']
|
|
42
45
|
zt_reason = zt_result_dict['zt_reason']
|
|
43
46
|
|
|
@@ -55,4 +58,4 @@ def update_null_zt_reason(str_day):
|
|
|
55
58
|
|
|
56
59
|
|
|
57
60
|
if __name__ == '__main__':
|
|
58
|
-
update_null_zt_reason('2025-11-
|
|
61
|
+
update_null_zt_reason('2025-11-18')
|
|
@@ -138,7 +138,7 @@ mns_scheduler/trade/task/trader_task_service.py,sha256=1vdjfs-M9y0ana2OLwWdlkB9Y
|
|
|
138
138
|
mns_scheduler/trade/tfp/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
139
139
|
mns_scheduler/trade/tfp/stock_tfp_info_sync.py,sha256=7sHUhvMW_5vEyfVhFGDP7It2F27STb0OcpNnBCQjZ8I,2574
|
|
140
140
|
mns_scheduler/zb/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
|
|
141
|
-
mns_scheduler/zb/stock_zb_pool_sync.py,sha256=
|
|
141
|
+
mns_scheduler/zb/stock_zb_pool_sync.py,sha256=ri8J2tgDduGY5eTYIpN6sYPNtqk_tmJxG5spvpWT2_s,1272
|
|
142
142
|
mns_scheduler/zt/__init__.py,sha256=Rzolrn2R5RZIj-eOmu9KcL6oZBY9Wjz_uBFXPlzirQc,1641
|
|
143
143
|
mns_scheduler/zt/connected_boards/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
|
|
144
144
|
mns_scheduler/zt/connected_boards/zt_five_boards_sync_api.py,sha256=HfjPHKD99fU9c37kSenEX2_qNvFAjQGgy8ERuacSxwk,10916
|
|
@@ -155,15 +155,15 @@ mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py,sha256=k2nrBjG41LU4
|
|
|
155
155
|
mns_scheduler/zt/script/sync_high_chg_pool_his_data.py,sha256=WX5ZlV0x2kkXiLTep8fcs2ZkWY5BMWS8lQv8xpq4DlY,1685
|
|
156
156
|
mns_scheduler/zt/script/sync_now_higt_chg_zt.py,sha256=7qUtn58ty9Vc6kY33BooCDIOojDGmSf9U5ncAtZt4cc,1853
|
|
157
157
|
mns_scheduler/zt/zt_pool/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
|
|
158
|
-
mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py,sha256=
|
|
158
|
+
mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py,sha256=f7YCyw51SBBK3JjSiZmZFERKYzkbdLzH5Ywl8VzXa-E,20665
|
|
159
159
|
mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py,sha256=LI4o4_sovmLj1tMROPRQRCj5gaITKLGoYH-nUCuysbU,7501
|
|
160
|
-
mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py,sha256=
|
|
160
|
+
mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py,sha256=757ttpIVoS-ElCXvQxOtOmm64tLQidpQRfnZk0fxdps,2491
|
|
161
161
|
mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
162
162
|
mns_scheduler/zz_task/data_sync_task.py,sha256=GbOJ0DhHVxTAz9W09POLZl3AzYFlTsPP7Q1VikSfQkY,23545
|
|
163
163
|
mns_scheduler/zz_task/compensation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
164
164
|
mns_scheduler/zz_task/compensation/compensate_task.py,sha256=Dyo66NcSnXZ-Cne4_v77BBb27SemAiuGXRLnvQ26X0E,6464
|
|
165
165
|
mns_scheduler/zz_task/compensation/compensate_task_one_day.py,sha256=jvaYpUS8AyJHgJTNchbco6eXMSzW1o4YNHgUBqrRTDk,5753
|
|
166
|
-
mns_scheduler-1.4.3.
|
|
167
|
-
mns_scheduler-1.4.3.
|
|
168
|
-
mns_scheduler-1.4.3.
|
|
169
|
-
mns_scheduler-1.4.3.
|
|
166
|
+
mns_scheduler-1.4.3.5.dist-info/METADATA,sha256=5g9wOmldXSKzldBkE-6cmYE_ZiwDltJOjNZvEwa5M34,64
|
|
167
|
+
mns_scheduler-1.4.3.5.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
168
|
+
mns_scheduler-1.4.3.5.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
|
|
169
|
+
mns_scheduler-1.4.3.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|