mns-scheduler 1.0.4.9__py3-none-any.whl → 1.0.5.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.
- mns_scheduler/__init__.py +2 -1
- mns_scheduler/company_info/company_constant_data.py +1 -102
- mns_scheduler/company_info/company_info_sync_api.py +31 -8
- mns_scheduler/company_info/de_list_stock_service.py +8 -0
- mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py +57 -2
- mns_scheduler/finance/em_financial_profit_sync_service_api.py +7 -2
- mns_scheduler/finance/finance_common_api.py +26 -1
- mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py +40 -16
- mns_scheduler/finance/sync_financial_report_service_api.py +18 -38
- mns_scheduler/finance/test/__init__.py +7 -0
- mns_scheduler/finance/test/fix_blask_list.py +36 -0
- mns_scheduler/hk/__init__.py +7 -0
- mns_scheduler/hk/hk_company_info_sync_service_api.py +59 -0
- mns_scheduler/irm/__init__.py +7 -0
- mns_scheduler/irm/stock_irm_cninfo_service.py +42 -0
- mns_scheduler/k_line/clean/k_line_info_clean_impl.py +7 -3
- mns_scheduler/risk/register_and_investigate_stock_sync_api.py +4 -1
- mns_scheduler/risk/stock_equity_mortgage_sync_api.py +32 -0
- mns_scheduler/zt/__init__.py +30 -0
- mns_scheduler/zt/realtime_quotes_now_zt_kc_sync.py +6 -1
- mns_scheduler/zt/today_high_chg_pool_sync_api.py +1 -1
- mns_scheduler/zz_task/data_sync_task.py +1 -1
- {mns_scheduler-1.0.4.9.dist-info → mns_scheduler-1.0.5.4.dist-info}/METADATA +1 -1
- {mns_scheduler-1.0.4.9.dist-info → mns_scheduler-1.0.5.4.dist-info}/RECORD +26 -19
- {mns_scheduler-1.0.4.9.dist-info → mns_scheduler-1.0.5.4.dist-info}/WHEEL +0 -0
- {mns_scheduler-1.0.4.9.dist-info → mns_scheduler-1.0.5.4.dist-info}/top_level.txt +0 -0
mns_scheduler/__init__.py
CHANGED
|
@@ -11,108 +11,6 @@ import mns_common.utils.data_frame_util as data_frame_util
|
|
|
11
11
|
|
|
12
12
|
mongodb_util = MongodbUtil('27017')
|
|
13
13
|
|
|
14
|
-
# 退市股票
|
|
15
|
-
de_listed_stock_list = [
|
|
16
|
-
"002018",
|
|
17
|
-
"600240",
|
|
18
|
-
"000033",
|
|
19
|
-
"000405",
|
|
20
|
-
"000406",
|
|
21
|
-
"000418",
|
|
22
|
-
"000508",
|
|
23
|
-
"000535",
|
|
24
|
-
"000542",
|
|
25
|
-
"000549",
|
|
26
|
-
"000569",
|
|
27
|
-
"000583",
|
|
28
|
-
"000594",
|
|
29
|
-
"000618",
|
|
30
|
-
"000621",
|
|
31
|
-
"000660",
|
|
32
|
-
"000675",
|
|
33
|
-
"000689",
|
|
34
|
-
"000699",
|
|
35
|
-
"000730",
|
|
36
|
-
"000748",
|
|
37
|
-
"000763",
|
|
38
|
-
"000765",
|
|
39
|
-
"000769",
|
|
40
|
-
"000787",
|
|
41
|
-
"000805",
|
|
42
|
-
"000817",
|
|
43
|
-
"000827",
|
|
44
|
-
"000866",
|
|
45
|
-
"000916",
|
|
46
|
-
"000939",
|
|
47
|
-
"000956",
|
|
48
|
-
"002477",
|
|
49
|
-
"300028",
|
|
50
|
-
"300090",
|
|
51
|
-
"300104",
|
|
52
|
-
"300156",
|
|
53
|
-
"300431",
|
|
54
|
-
"600001",
|
|
55
|
-
"600002",
|
|
56
|
-
"600003",
|
|
57
|
-
"600005",
|
|
58
|
-
"600065",
|
|
59
|
-
"600069",
|
|
60
|
-
"600087",
|
|
61
|
-
"600092",
|
|
62
|
-
"600102",
|
|
63
|
-
"600181",
|
|
64
|
-
"600205",
|
|
65
|
-
"600263",
|
|
66
|
-
"600270",
|
|
67
|
-
"600286",
|
|
68
|
-
"600296",
|
|
69
|
-
"600317",
|
|
70
|
-
"600357",
|
|
71
|
-
"600401",
|
|
72
|
-
"600472",
|
|
73
|
-
"600553",
|
|
74
|
-
"600591",
|
|
75
|
-
"600625",
|
|
76
|
-
"600627",
|
|
77
|
-
"600631",
|
|
78
|
-
"600632",
|
|
79
|
-
"600646",
|
|
80
|
-
"600670",
|
|
81
|
-
"600672",
|
|
82
|
-
"600680",
|
|
83
|
-
"600752",
|
|
84
|
-
"600772",
|
|
85
|
-
"600786",
|
|
86
|
-
"600788",
|
|
87
|
-
"600799",
|
|
88
|
-
"600813",
|
|
89
|
-
"600832",
|
|
90
|
-
"600849",
|
|
91
|
-
"600852",
|
|
92
|
-
"600899",
|
|
93
|
-
"600991",
|
|
94
|
-
"601558"
|
|
95
|
-
]
|
|
96
|
-
|
|
97
|
-
# 需要修改行业的股票
|
|
98
|
-
fix_symbol_list = [
|
|
99
|
-
'688507',
|
|
100
|
-
'301387',
|
|
101
|
-
'688480',
|
|
102
|
-
'301112',
|
|
103
|
-
'603260',
|
|
104
|
-
'300559',
|
|
105
|
-
'300836',
|
|
106
|
-
'300293',
|
|
107
|
-
'688630',
|
|
108
|
-
'001309',
|
|
109
|
-
'600338',
|
|
110
|
-
'000032',
|
|
111
|
-
'300042',
|
|
112
|
-
'300295',
|
|
113
|
-
'300483'
|
|
114
|
-
]
|
|
115
|
-
|
|
116
14
|
|
|
117
15
|
def get_fix_symbol_industry():
|
|
118
16
|
return pd.DataFrame([['688480', '赛恩斯', '760103', '环境治理'],
|
|
@@ -131,6 +29,7 @@ def get_fix_symbol_industry():
|
|
|
131
29
|
['300295', '三六五网', '430300', '物业管理'],
|
|
132
30
|
['300947', '德必集团', '430300', '物业管理'],
|
|
133
31
|
['300483', '首华燃气', '410301', '燃气Ⅲ'],
|
|
32
|
+
['300215', '电科院', '410110', '电能综合服务'],
|
|
134
33
|
],
|
|
135
34
|
columns=['symbol', 'name', 'new_industry_code', 'new_industry'])
|
|
136
35
|
|
|
@@ -19,6 +19,8 @@ import mns_common.api.kpl.symbol.kpl_real_time_quotes_api as kpl_real_time_quote
|
|
|
19
19
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
20
20
|
import mns_common.api.kpl.constant.kpl_constant as kpl_constant
|
|
21
21
|
import mns_common.component.company.company_common_service_api as company_common_service_api
|
|
22
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
23
|
+
import mns_common.component.k_line.common.k_line_common_service_api as k_line_common_service_api
|
|
22
24
|
|
|
23
25
|
mongodb_util = MongodbUtil('27017')
|
|
24
26
|
# 分页大小
|
|
@@ -89,6 +91,7 @@ def filed_sort(company_info):
|
|
|
89
91
|
"holder_controller_rate",
|
|
90
92
|
"area",
|
|
91
93
|
"list_date",
|
|
94
|
+
"deal_days",
|
|
92
95
|
"pe_ttm",
|
|
93
96
|
"pb",
|
|
94
97
|
"ROE",
|
|
@@ -186,6 +189,7 @@ def fix_company_industry(symbol):
|
|
|
186
189
|
sub_stock = ths_stock_api.ths_stock_concept('885598')
|
|
187
190
|
sub_stock_symbol_list = list(sub_stock['symbol'])
|
|
188
191
|
except BaseException as e:
|
|
192
|
+
logger.error("出现异常:{},{}", symbol, e)
|
|
189
193
|
query = {'concept_code': 885598}
|
|
190
194
|
ths_stock_concept_detail = mongodb_util.find_query_data('ths_stock_concept_detail', query)
|
|
191
195
|
sub_stock_symbol_list = list(ths_stock_concept_detail['symbol'])
|
|
@@ -195,20 +199,36 @@ def fix_company_industry(symbol):
|
|
|
195
199
|
try:
|
|
196
200
|
company_info.dropna(subset=['symbol'], axis=0, inplace=True)
|
|
197
201
|
company_info.dropna(subset=['_id'], axis=0, inplace=True)
|
|
198
|
-
mongodb_util.save_mongo(company_info,
|
|
202
|
+
mongodb_util.save_mongo(company_info, db_name_constant.COMPANY_INFO)
|
|
203
|
+
# 保存历史数据
|
|
204
|
+
save_company_info_his(company_info)
|
|
199
205
|
except BaseException as e:
|
|
200
|
-
logger.error("出现异常:{}", symbol)
|
|
206
|
+
logger.error("出现异常:{},{}", symbol, e)
|
|
201
207
|
|
|
202
208
|
return company_info
|
|
203
209
|
|
|
204
210
|
|
|
211
|
+
def save_company_info_his(company_info_df):
|
|
212
|
+
now_date = datetime.now()
|
|
213
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
214
|
+
company_info_df['symbol'] = company_info_df['_id']
|
|
215
|
+
company_info_df['str_day'] = str_day
|
|
216
|
+
company_info_df['_id'] = company_info_df['_id'] + "_" + str_day
|
|
217
|
+
remove_query = {'str_day': str_day}
|
|
218
|
+
tag = mongodb_util.remove_data(remove_query, db_name_constant.COMPANY_INFO_HIS)
|
|
219
|
+
success = tag.acknowledged
|
|
220
|
+
if success:
|
|
221
|
+
mongodb_util.insert_mongo(company_info_df, db_name_constant.COMPANY_INFO_HIS)
|
|
222
|
+
|
|
223
|
+
|
|
205
224
|
def sync_company_base_info(symbol_list):
|
|
206
225
|
global result
|
|
207
226
|
result = []
|
|
208
227
|
create_index()
|
|
209
228
|
east_money_stock_info = get_east_money_stock_info()
|
|
229
|
+
de_listed_stock_list = company_common_service_api.get_de_list_company()
|
|
210
230
|
east_money_stock_info = east_money_stock_info.loc[~(
|
|
211
|
-
east_money_stock_info['symbol'].isin(
|
|
231
|
+
east_money_stock_info['symbol'].isin(de_listed_stock_list))]
|
|
212
232
|
east_money_stock_info = common_service_fun_api.exclude_ts_symbol(east_money_stock_info)
|
|
213
233
|
east_money_stock_info = east_money_stock_info.loc[~((east_money_stock_info['industry'] == '-')
|
|
214
234
|
& (east_money_stock_info['now_price'] == 0))]
|
|
@@ -296,8 +316,8 @@ def single_thread_sync_company_info(east_money_stock_info,
|
|
|
296
316
|
now_date = datetime.now()
|
|
297
317
|
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
298
318
|
company_info_type['sync_date'] = str_now_date
|
|
299
|
-
|
|
300
|
-
if company_one.symbol in
|
|
319
|
+
fix_symbol_industry_df = company_constant_data_api.get_fix_symbol_industry()
|
|
320
|
+
if company_one.symbol in list(fix_symbol_industry_df['symbol']):
|
|
301
321
|
# fix sw_industry
|
|
302
322
|
company_info_type = company_constant_data_api.fix_symbol_industry(company_info_type, company_one.symbol)
|
|
303
323
|
|
|
@@ -308,7 +328,10 @@ def single_thread_sync_company_info(east_money_stock_info,
|
|
|
308
328
|
company_info_type['kpl_plate_list_info'] = '-'
|
|
309
329
|
company_info_type['kpl_plate_name'] = '-'
|
|
310
330
|
company_info_type['kpl_most_relative_name'] = '-'
|
|
311
|
-
|
|
331
|
+
now_date = datetime.now()
|
|
332
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
333
|
+
deal_days = k_line_common_service_api.get_deal_days(str_day, company_one.symbol)
|
|
334
|
+
company_info_type['deal_days'] = deal_days
|
|
312
335
|
try:
|
|
313
336
|
if data_frame_util.is_not_empty(kpl_real_time_quotes):
|
|
314
337
|
kpl_real_time_quotes_one = kpl_real_time_quotes.loc[
|
|
@@ -470,6 +493,6 @@ if __name__ == '__main__':
|
|
|
470
493
|
# 300293
|
|
471
494
|
# sync_company_base_info(None)
|
|
472
495
|
# new_company_info_update()
|
|
473
|
-
sync_company_base_info(
|
|
474
|
-
fix_company_industry(
|
|
496
|
+
sync_company_base_info(None)
|
|
497
|
+
fix_company_industry(None)
|
|
475
498
|
# group_by_industry()
|
|
@@ -33,6 +33,14 @@ def sync_de_list_stock():
|
|
|
33
33
|
all_de_list_df['list_date'] = all_de_list_df['list_date'].astype(str)
|
|
34
34
|
all_de_list_df['de_list_date'] = all_de_list_df['de_list_date'].astype(str)
|
|
35
35
|
mongodb_util.save_mongo(all_de_list_df, db_name_constant.DE_LIST_STOCK)
|
|
36
|
+
remove_black_list(all_de_list_df)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# 移除黑名单
|
|
40
|
+
def remove_black_list(all_de_list_df):
|
|
41
|
+
symbol_list = list(all_de_list_df['symbol'])
|
|
42
|
+
remove_query = {'symbol': {"$in": symbol_list}}
|
|
43
|
+
mongodb_util.remove_data(remove_query, db_name_constant.SELF_BLACK_STOCK)
|
|
36
44
|
|
|
37
45
|
|
|
38
46
|
if __name__ == '__main__':
|
|
@@ -9,6 +9,7 @@ import akshare as ak
|
|
|
9
9
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
10
10
|
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
11
11
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
12
|
+
|
|
12
13
|
mongodb_util = MongodbUtil('27017')
|
|
13
14
|
from loguru import logger
|
|
14
15
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
@@ -345,10 +346,11 @@ def get_em_asset_liability_api(symbol):
|
|
|
345
346
|
try:
|
|
346
347
|
stock_balance_sheet_by_report_em_df = ak.stock_balance_sheet_by_report_em(sec_code)
|
|
347
348
|
except Exception as e:
|
|
348
|
-
logger.error("
|
|
349
|
+
logger.error("同步资产表异常:{},{}", symbol, e)
|
|
349
350
|
return None
|
|
350
351
|
if data_frame_util.is_empty(stock_balance_sheet_by_report_em_df):
|
|
351
352
|
return None
|
|
353
|
+
stock_balance_sheet_by_report_em_df = check_columns(stock_balance_sheet_by_report_em_df)
|
|
352
354
|
stock_balance_sheet_by_report_em_df = stock_balance_sheet_by_report_em_df[[
|
|
353
355
|
'SECUCODE',
|
|
354
356
|
'SECURITY_CODE',
|
|
@@ -426,7 +428,60 @@ def get_em_asset_liability_api(symbol):
|
|
|
426
428
|
if data_frame_util.is_empty(new_asset_df):
|
|
427
429
|
return None
|
|
428
430
|
new_asset_df.fillna(0, inplace=True)
|
|
429
|
-
|
|
431
|
+
return new_asset_df
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
def check_columns(new_asset_df):
|
|
435
|
+
if 'CONTRACT_LIAB' not in new_asset_df.columns:
|
|
436
|
+
new_asset_df['CONTRACT_LIAB'] = 0
|
|
437
|
+
|
|
438
|
+
if 'DEVELOP_EXPENSE' not in new_asset_df.columns:
|
|
439
|
+
new_asset_df['DEVELOP_EXPENSE'] = 0
|
|
440
|
+
|
|
441
|
+
if 'INVENTORY' not in new_asset_df.columns:
|
|
442
|
+
new_asset_df['INVENTORY'] = 0
|
|
443
|
+
|
|
444
|
+
if 'NONCURRENT_LIAB_1YEAR' not in new_asset_df.columns:
|
|
445
|
+
new_asset_df['NONCURRENT_LIAB_1YEAR'] = 0
|
|
446
|
+
|
|
447
|
+
if 'NOTE_ACCOUNTS_PAYABLE' not in new_asset_df.columns:
|
|
448
|
+
new_asset_df['NOTE_ACCOUNTS_PAYABLE'] = 0
|
|
449
|
+
|
|
450
|
+
if 'NOTE_ACCOUNTS_RECE' not in new_asset_df.columns:
|
|
451
|
+
new_asset_df['NOTE_ACCOUNTS_RECE'] = 0
|
|
452
|
+
|
|
453
|
+
if 'OTHER_CURRENT_ASSET' not in new_asset_df.columns:
|
|
454
|
+
new_asset_df['OTHER_CURRENT_ASSET'] = 0
|
|
455
|
+
|
|
456
|
+
if 'OTHER_CURRENT_LIAB' not in new_asset_df.columns:
|
|
457
|
+
new_asset_df['OTHER_CURRENT_LIAB'] = 0
|
|
458
|
+
|
|
459
|
+
if 'OTHER_NONCURRENT_ASSET' not in new_asset_df.columns:
|
|
460
|
+
new_asset_df['OTHER_NONCURRENT_ASSET'] = 0
|
|
461
|
+
if 'OTHER_NONCURRENT_FINASSET' not in new_asset_df.columns:
|
|
462
|
+
new_asset_df['OTHER_NONCURRENT_FINASSET'] = 0
|
|
463
|
+
if 'PREPAYMENT' not in new_asset_df.columns:
|
|
464
|
+
new_asset_df['PREPAYMENT'] = 0
|
|
465
|
+
if 'TOTAL_CURRENT_ASSETS' not in new_asset_df.columns:
|
|
466
|
+
new_asset_df['TOTAL_CURRENT_ASSETS'] = 0
|
|
467
|
+
if 'TOTAL_CURRENT_LIAB' not in new_asset_df.columns:
|
|
468
|
+
new_asset_df['TOTAL_CURRENT_LIAB'] = 0
|
|
469
|
+
if 'TOTAL_NONCURRENT_ASSETS' not in new_asset_df.columns:
|
|
470
|
+
new_asset_df['TOTAL_NONCURRENT_ASSETS'] = 0
|
|
471
|
+
if 'TOTAL_NONCURRENT_LIAB' not in new_asset_df.columns:
|
|
472
|
+
new_asset_df['TOTAL_NONCURRENT_LIAB'] = 0
|
|
473
|
+
if 'TOTAL_OTHER_PAYABLE' not in new_asset_df.columns:
|
|
474
|
+
new_asset_df['TOTAL_OTHER_PAYABLE'] = 0
|
|
475
|
+
if 'TOTAL_OTHER_RECE' not in new_asset_df.columns:
|
|
476
|
+
new_asset_df['TOTAL_OTHER_RECE'] = 0
|
|
477
|
+
if 'ACCOUNTS_RECE' not in new_asset_df.columns:
|
|
478
|
+
new_asset_df['ACCOUNTS_RECE'] = 0
|
|
479
|
+
|
|
480
|
+
if 'LOAN_ADVANCE' not in new_asset_df.columns:
|
|
481
|
+
new_asset_df['LOAN_ADVANCE'] = 0
|
|
482
|
+
if 'MONETARYFUNDS' not in new_asset_df.columns:
|
|
483
|
+
new_asset_df['MONETARYFUNDS'] = 0
|
|
484
|
+
return new_asset_df
|
|
430
485
|
|
|
431
486
|
|
|
432
487
|
if __name__ == '__main__':
|
|
@@ -326,8 +326,13 @@ def check_columns(profit_df):
|
|
|
326
326
|
profit_df['FE_INTEREST_INCOME'] = 0
|
|
327
327
|
if 'CREDIT_IMPAIRMENT_INCOME' not in profit_df.columns:
|
|
328
328
|
profit_df['CREDIT_IMPAIRMENT_INCOME'] = 0
|
|
329
|
-
if '
|
|
330
|
-
|
|
329
|
+
if 'ACCOUNTS_RECE' not in profit_df.columns:
|
|
330
|
+
profit_df['ACCOUNTS_RECE'] = 0
|
|
331
|
+
|
|
332
|
+
if 'LOAN_ADVANCE' not in profit_df.columns:
|
|
333
|
+
profit_df['LOAN_ADVANCE'] = 0
|
|
334
|
+
if 'MONETARYFUNDS' not in profit_df.columns:
|
|
335
|
+
profit_df['MONETARYFUNDS'] = 0
|
|
331
336
|
return profit_df
|
|
332
337
|
|
|
333
338
|
|
|
@@ -9,7 +9,8 @@ sys.path.append(project_path)
|
|
|
9
9
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
10
10
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
11
11
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
12
|
-
|
|
12
|
+
import mns_common.api.em.east_money_stock_api as east_money_stock_api
|
|
13
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
13
14
|
mongodb_util = MongodbUtil('27017')
|
|
14
15
|
|
|
15
16
|
|
|
@@ -33,3 +34,27 @@ def find_profit_report(period_time):
|
|
|
33
34
|
def find_asset_liability_report(period_time):
|
|
34
35
|
query = {"REPORT_DATE": period_time}
|
|
35
36
|
return mongodb_util.find_query_data(db_name_constant.EM_STOCK_ASSET_LIABILITY, query)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# 查出未报告的股票
|
|
41
|
+
def find_un_report_symbol(period_time, report_name):
|
|
42
|
+
real_time_quotes_df = east_money_stock_api.get_real_time_quotes_all_stocks()
|
|
43
|
+
real_time_quotes_df = real_time_quotes_df.loc[~(real_time_quotes_df['name'].str.contains('退'))]
|
|
44
|
+
real_time_quotes_df.dropna(subset=['list_date'], axis=0, inplace=True)
|
|
45
|
+
|
|
46
|
+
de_list_stock_df = mongodb_util.find_all_data(db_name_constant.DE_LIST_STOCK)
|
|
47
|
+
real_time_quotes_df = real_time_quotes_df.loc[
|
|
48
|
+
~(real_time_quotes_df['symbol'].isin(list(de_list_stock_df['symbol'])))]
|
|
49
|
+
|
|
50
|
+
if report_name == db_name_constant.EM_STOCK_ASSET_LIABILITY:
|
|
51
|
+
had_asset_df = find_asset_liability_report(period_time)
|
|
52
|
+
if data_frame_util.is_not_empty(had_asset_df):
|
|
53
|
+
real_time_quotes_df = real_time_quotes_df.loc[
|
|
54
|
+
~(real_time_quotes_df['symbol'].isin(list(had_asset_df['SECURITY_CODE'])))]
|
|
55
|
+
if report_name == db_name_constant.EM_STOCK_PROFIT:
|
|
56
|
+
had_profit_df = find_profit_report(period_time)
|
|
57
|
+
if data_frame_util.is_not_empty(had_profit_df):
|
|
58
|
+
real_time_quotes_df = real_time_quotes_df.loc[
|
|
59
|
+
~(real_time_quotes_df['symbol'].isin(list(had_profit_df['SECURITY_CODE'])))]
|
|
60
|
+
return real_time_quotes_df
|
|
@@ -14,6 +14,7 @@ from mns_common.db.MongodbUtil import MongodbUtil
|
|
|
14
14
|
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
15
15
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
16
16
|
import pandas as pd
|
|
17
|
+
|
|
17
18
|
# 1.无保留意见/标准报告:报告没问题。(没有发现造假,但也不能保证为真)
|
|
18
19
|
#
|
|
19
20
|
# 2.带强调事项段的无保留意见:报告没问题,但是有亏损获对其可持续经营有重大疑虑(可能造假,至少是在粉饰报表)
|
|
@@ -35,6 +36,11 @@ MIN_INCOME_MAIN = 320000000
|
|
|
35
36
|
MIN_INCOME_SUB = 120000000
|
|
36
37
|
# 最大负债比
|
|
37
38
|
MAX_LIABILITY_RATIO = 90
|
|
39
|
+
# 负载超过90%时候最小净资产
|
|
40
|
+
MIN_NET_ASSET = 1000000000
|
|
41
|
+
# 排除校验负债比的行业
|
|
42
|
+
EXCLUDE_INDUSTRY = ['保险', '银行', '证券']
|
|
43
|
+
|
|
38
44
|
# 最迟出报告的天数
|
|
39
45
|
LATE_REPORT_DAYS = 3
|
|
40
46
|
|
|
@@ -64,18 +70,19 @@ def year_report_exception_check(new_report_df, period_time, report_type):
|
|
|
64
70
|
now_date = datetime.now()
|
|
65
71
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
66
72
|
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
67
|
-
|
|
73
|
+
|
|
68
74
|
# 年报有问题
|
|
69
75
|
if opinion_type != OPINION_TYPE:
|
|
76
|
+
id_key = symbol + "_" + period_time + "_" + black_list_service_api.FINANCIAL_PROBLEM_ANNUAL_REPORT
|
|
70
77
|
black_list_service_api.save_black_stock(id_key,
|
|
71
78
|
symbol,
|
|
72
79
|
name,
|
|
73
80
|
str_day,
|
|
74
81
|
str_now_date,
|
|
75
|
-
'年报审计有问题:'+"["+opinion_type+"]",
|
|
82
|
+
'年报审计有问题:' + "[" + str(opinion_type) + "]",
|
|
76
83
|
'年报审计有问题',
|
|
77
84
|
'',
|
|
78
|
-
black_list_service_api.
|
|
85
|
+
black_list_service_api.FINANCIAL_PROBLEM_ANNUAL_REPORT)
|
|
79
86
|
|
|
80
87
|
if report_type == db_name_constant.EM_STOCK_PROFIT:
|
|
81
88
|
# 利润总额 净利润 扣除非经常性损益后的净利润 三者最小为负
|
|
@@ -93,8 +100,11 @@ def year_report_exception_check(new_report_df, period_time, report_type):
|
|
|
93
100
|
deduct_parent_profit = list(new_report_one_df['DEDUCT_PARENT_NETPROFIT'])[0]
|
|
94
101
|
# 营业总收入
|
|
95
102
|
total_operate_income = list(new_report_one_df['TOTAL_OPERATE_INCOME'])[0]
|
|
103
|
+
if total_operate_income == 0:
|
|
104
|
+
# 营业收入
|
|
105
|
+
total_operate_income = list(new_report_one_df['OPERATE_INCOME'])[0]
|
|
96
106
|
|
|
97
|
-
|
|
107
|
+
# 最小利润收入
|
|
98
108
|
min_profit = min(total_profit, net_profit, operate_profit,
|
|
99
109
|
continued_profit, parent_profit, deduct_parent_profit)
|
|
100
110
|
if min_profit < 0:
|
|
@@ -102,16 +112,21 @@ def year_report_exception_check(new_report_df, period_time, report_type):
|
|
|
102
112
|
classification = common_service_fun_api.classify_symbol_one(symbol)
|
|
103
113
|
if ((classification in ['S', 'H'] and total_operate_income < MIN_INCOME_MAIN)
|
|
104
114
|
| (classification in ['K', 'C'] and total_operate_income < MIN_INCOME_SUB)):
|
|
105
|
-
id_key = symbol + "_" + period_time
|
|
115
|
+
id_key = symbol + "_" + period_time + "_" + black_list_service_api.FINANCIAL_PROBLEM_PROFIT
|
|
116
|
+
min_profit = round(min_profit / common_service_fun_api.TEN_THOUSAND, 1)
|
|
117
|
+
total_operate_income = round(total_operate_income / common_service_fun_api.HUNDRED_MILLION, 1)
|
|
118
|
+
|
|
106
119
|
black_list_service_api.save_black_stock(id_key,
|
|
107
120
|
symbol,
|
|
108
121
|
name,
|
|
109
122
|
str_day,
|
|
110
123
|
str_now_date,
|
|
111
|
-
'
|
|
112
|
-
|
|
124
|
+
'年报:利润:' + '[' + str(min_profit) + '万]' + '收入:' + str(
|
|
125
|
+
total_operate_income) + '[' + '亿元]--' + '触发退市风险',
|
|
126
|
+
'年报:利润:' + '[' + str(min_profit) + '万]' + '收入:' + str(
|
|
127
|
+
total_operate_income) + '[' + '亿元]--' + '触发退市风险',
|
|
113
128
|
'',
|
|
114
|
-
black_list_service_api.
|
|
129
|
+
black_list_service_api.FINANCIAL_PROBLEM_PROFIT)
|
|
115
130
|
|
|
116
131
|
|
|
117
132
|
# 负债比校验
|
|
@@ -121,13 +136,20 @@ def liability_ratio_check(report_type, new_report_df, period_time):
|
|
|
121
136
|
new_report_one_df = new_report_df.iloc[0:1]
|
|
122
137
|
# 负债比
|
|
123
138
|
liability_ratio = list(new_report_one_df['liability_ratio'])[0]
|
|
139
|
+
# 净资产
|
|
140
|
+
net_asset = round(list(new_report_one_df['TOTAL_ASSETS'])[0] - list(new_report_one_df['TOTAL_LIABILITIES'])[0],
|
|
141
|
+
2)
|
|
124
142
|
|
|
125
143
|
symbol = list(new_report_one_df['SECURITY_CODE'])[0]
|
|
126
144
|
name = list(new_report_one_df['SECURITY_NAME_ABBR'])[0]
|
|
127
145
|
now_date = datetime.now()
|
|
128
146
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
129
147
|
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
130
|
-
id_key = symbol + "_" + period_time
|
|
148
|
+
id_key = symbol + "_" + period_time + "_" + black_list_service_api.FINANCIAL_PROBLEM_DEBT
|
|
149
|
+
|
|
150
|
+
query_company = {'_id': symbol, 'industry': {'$in': EXCLUDE_INDUSTRY}}
|
|
151
|
+
if mongodb_util.exist_data_query(db_name_constant.COMPANY_INFO, query_company):
|
|
152
|
+
return None
|
|
131
153
|
|
|
132
154
|
if liability_ratio >= MAX_LIABILITY_RATIO:
|
|
133
155
|
black_list_service_api.save_black_stock(id_key,
|
|
@@ -135,10 +157,12 @@ def liability_ratio_check(report_type, new_report_df, period_time):
|
|
|
135
157
|
name,
|
|
136
158
|
str_day,
|
|
137
159
|
str_now_date,
|
|
138
|
-
'
|
|
139
|
-
|
|
160
|
+
'负债过高:' + "[" + str(
|
|
161
|
+
liability_ratio) + "]" + "," + "净资产:" + str(round(
|
|
162
|
+
net_asset / common_service_fun_api.HUNDRED_MILLION, 0)) + "亿",
|
|
163
|
+
'负债过高:' + "[" + str(liability_ratio) + "]",
|
|
140
164
|
'',
|
|
141
|
-
black_list_service_api.
|
|
165
|
+
black_list_service_api.FINANCIAL_PROBLEM_DEBT)
|
|
142
166
|
|
|
143
167
|
|
|
144
168
|
# 未出财报
|
|
@@ -155,11 +179,11 @@ def un_report_check(sync_time, now_year, period, period_time):
|
|
|
155
179
|
elif period == 3:
|
|
156
180
|
last_report_day = str(now_year) + "-10-01"
|
|
157
181
|
max_report_day = trade_date_common_service_api.get_before_trade_date(last_report_day, LATE_REPORT_DAYS)
|
|
158
|
-
if max_report_day
|
|
182
|
+
if max_report_day >= sync_time:
|
|
159
183
|
|
|
160
184
|
for un_asset_one in un_report_df.itertuples():
|
|
161
185
|
symbol = un_asset_one.symbol
|
|
162
|
-
id_key = symbol + "_" + period_time
|
|
186
|
+
id_key = symbol + "_" + period_time + "_" + black_list_service_api.FINANCIAL_PROBLEM_NOT_REPORT
|
|
163
187
|
name = un_asset_one.name
|
|
164
188
|
now_date = datetime.now()
|
|
165
189
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
@@ -173,6 +197,6 @@ def un_report_check(sync_time, now_year, period, period_time):
|
|
|
173
197
|
'未出财报',
|
|
174
198
|
'未出财报',
|
|
175
199
|
'',
|
|
176
|
-
black_list_service_api.
|
|
200
|
+
black_list_service_api.FINANCIAL_PROBLEM_NOT_REPORT)
|
|
177
201
|
except Exception as e:
|
|
178
|
-
logger.error("
|
|
202
|
+
logger.error("更新未出报告异常:{},{},{}", symbol, period_time, e)
|
|
@@ -6,8 +6,7 @@ end = file_path.index('mns') + 16
|
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
from datetime import datetime
|
|
9
|
-
|
|
10
|
-
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
9
|
+
|
|
11
10
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
12
11
|
import mns_scheduler.finance.em_financial_profit_sync_service_api as em_financial_profit_sync_service_api
|
|
13
12
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
@@ -16,6 +15,7 @@ import \
|
|
|
16
15
|
mns_scheduler.finance.em_financial_asset_liability_sync_service_api as em_financial_asset_liability_sync_service_api
|
|
17
16
|
import mns_scheduler.finance.financial_high_risk_stock_clean_service_api as financial_high_risk_stock_clean_service_api
|
|
18
17
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
18
|
+
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
19
19
|
|
|
20
20
|
mongodb_util = MongodbUtil('27017')
|
|
21
21
|
|
|
@@ -36,35 +36,36 @@ def sync_financial_report():
|
|
|
36
36
|
if 1 <= now_month <= 5:
|
|
37
37
|
period = 4
|
|
38
38
|
period_time = str(now_year - 1) + "-12-31 00:00:00"
|
|
39
|
-
sync_profit_report(period_time, sync_time, period
|
|
40
|
-
sync_asset_liability_report(period_time, sync_time, period
|
|
39
|
+
sync_profit_report(period_time, sync_time, period)
|
|
40
|
+
sync_asset_liability_report(period_time, sync_time, period)
|
|
41
41
|
|
|
42
42
|
# 一季报
|
|
43
43
|
elif now_month == 5:
|
|
44
44
|
period = 1
|
|
45
45
|
period_time = str(now_year) + "-03-31 00:00:00"
|
|
46
|
-
sync_profit_report(period_time, sync_time, period
|
|
47
|
-
sync_asset_liability_report(period_time, sync_time, period
|
|
46
|
+
sync_profit_report(period_time, sync_time, period)
|
|
47
|
+
sync_asset_liability_report(period_time, sync_time, period)
|
|
48
48
|
|
|
49
49
|
# 二季报
|
|
50
50
|
elif 7 <= now_month <= 8:
|
|
51
51
|
period = 2
|
|
52
52
|
period_time = str(now_year) + "-06-30 00:00:00"
|
|
53
|
-
sync_profit_report(period_time, sync_time, period
|
|
54
|
-
sync_asset_liability_report(period_time, sync_time, period
|
|
53
|
+
sync_profit_report(period_time, sync_time, period)
|
|
54
|
+
sync_asset_liability_report(period_time, sync_time, period)
|
|
55
55
|
# 三季报
|
|
56
56
|
elif now_month == 10:
|
|
57
57
|
period = 3
|
|
58
58
|
period_time = str(now_year) + "-09-30 00:00:00"
|
|
59
|
-
sync_profit_report(period_time, sync_time, period
|
|
60
|
-
sync_asset_liability_report(period_time, sync_time, period
|
|
59
|
+
sync_profit_report(period_time, sync_time, period)
|
|
60
|
+
sync_asset_liability_report(period_time, sync_time, period)
|
|
61
61
|
# 未出报告check
|
|
62
62
|
financial_high_risk_stock_clean_service_api.un_report_check(sync_time, now_year, period, period_time)
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
# 同步资产表
|
|
66
|
-
def sync_asset_liability_report(period_time, sync_time, period
|
|
67
|
-
un_report_asset_df = find_un_report_symbol(period_time,
|
|
66
|
+
def sync_asset_liability_report(period_time, sync_time, period):
|
|
67
|
+
un_report_asset_df = finance_common_api.find_un_report_symbol(period_time,
|
|
68
|
+
db_name_constant.EM_STOCK_ASSET_LIABILITY)
|
|
68
69
|
for un_report_asset_one in un_report_asset_df.itertuples():
|
|
69
70
|
try:
|
|
70
71
|
symbol = un_report_asset_one.symbol
|
|
@@ -84,19 +85,20 @@ def sync_asset_liability_report(period_time, sync_time, period, now_year):
|
|
|
84
85
|
db_name_constant.EM_STOCK_ASSET_LIABILITY)
|
|
85
86
|
|
|
86
87
|
except Exception as e:
|
|
87
|
-
logger.error("
|
|
88
|
+
logger.error("同步资产表异常:{},{},{}", symbol, period_time, e)
|
|
88
89
|
|
|
89
90
|
|
|
90
91
|
# 同步利润表
|
|
91
|
-
def sync_profit_report(period_time, sync_time, period
|
|
92
|
-
un_report_profit_df = find_un_report_symbol(period_time, db_name_constant.EM_STOCK_PROFIT)
|
|
92
|
+
def sync_profit_report(period_time, sync_time, period):
|
|
93
|
+
un_report_profit_df = finance_common_api.find_un_report_symbol(period_time, db_name_constant.EM_STOCK_PROFIT)
|
|
93
94
|
for un_report_profit_one in un_report_profit_df.itertuples():
|
|
94
95
|
try:
|
|
95
96
|
symbol = un_report_profit_one.symbol
|
|
96
97
|
new_profit_df = em_financial_profit_sync_service_api.get_em_profit_api(symbol)
|
|
97
|
-
new_profit_df['sync_time'] = sync_time
|
|
98
98
|
if data_frame_util.is_empty(new_profit_df):
|
|
99
99
|
continue
|
|
100
|
+
new_profit_df['sync_time'] = sync_time
|
|
101
|
+
|
|
100
102
|
new_profit_df['symbol'] = symbol
|
|
101
103
|
mongodb_util.insert_mongo(new_profit_df, db_name_constant.EM_STOCK_PROFIT)
|
|
102
104
|
|
|
@@ -107,27 +109,5 @@ def sync_profit_report(period_time, sync_time, period, now_year):
|
|
|
107
109
|
logger.error("同步利润表异常:{},{},{}", symbol, period_time, e)
|
|
108
110
|
|
|
109
111
|
|
|
110
|
-
# 查出未报告的股票
|
|
111
|
-
def find_un_report_symbol(period_time, report_name):
|
|
112
|
-
real_time_quotes_df = east_money_stock_api.get_real_time_quotes_all_stocks()
|
|
113
|
-
real_time_quotes_df = real_time_quotes_df.loc[~(real_time_quotes_df['name'].str.contains('退'))]
|
|
114
|
-
|
|
115
|
-
de_list_stock_df = mongodb_util.find_all_data(db_name_constant.DE_LIST_STOCK)
|
|
116
|
-
real_time_quotes_df = real_time_quotes_df.loc[
|
|
117
|
-
~(real_time_quotes_df['symbol'].isin(list(de_list_stock_df['symbol'])))]
|
|
118
|
-
|
|
119
|
-
if report_name == db_name_constant.EM_STOCK_ASSET_LIABILITY:
|
|
120
|
-
had_asset_df = finance_common_api.find_asset_liability_report(period_time)
|
|
121
|
-
if data_frame_util.is_not_empty(had_asset_df):
|
|
122
|
-
real_time_quotes_df = real_time_quotes_df.loc[
|
|
123
|
-
~(real_time_quotes_df['symbol'].isin(list(had_asset_df['SECURITY_CODE'])))]
|
|
124
|
-
if report_name == db_name_constant.EM_STOCK_PROFIT:
|
|
125
|
-
had_profit_df = finance_common_api.find_profit_report(period_time)
|
|
126
|
-
if data_frame_util.is_not_empty(had_profit_df):
|
|
127
|
-
real_time_quotes_df = real_time_quotes_df.loc[
|
|
128
|
-
~(real_time_quotes_df['symbol'].isin(list(had_profit_df['SECURITY_CODE'])))]
|
|
129
|
-
return real_time_quotes_df
|
|
130
|
-
|
|
131
|
-
|
|
132
112
|
if __name__ == '__main__':
|
|
133
113
|
sync_financial_report()
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
11
|
+
|
|
12
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
13
|
+
|
|
14
|
+
import mns_scheduler.finance.financial_high_risk_stock_clean_service_api as financial_high_risk_stock_clean_service_api
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
mongodb_util = MongodbUtil('27017')
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def fix_profit_black_list():
|
|
21
|
+
period_time = "2023-12-31 00:00:00"
|
|
22
|
+
period = 4
|
|
23
|
+
report_type_list = [db_name_constant.EM_STOCK_PROFIT, db_name_constant.EM_STOCK_ASSET_LIABILITY]
|
|
24
|
+
for report_type in report_type_list:
|
|
25
|
+
query = {'REPORT_DATE': period_time}
|
|
26
|
+
em_stock_profit_df_list = mongodb_util.find_query_data(report_type, query)
|
|
27
|
+
for em_stock_one in em_stock_profit_df_list.itertuples():
|
|
28
|
+
em_stock_one_df = em_stock_profit_df_list.loc[
|
|
29
|
+
em_stock_profit_df_list['SECURITY_CODE'] == em_stock_one.SECURITY_CODE]
|
|
30
|
+
|
|
31
|
+
financial_high_risk_stock_clean_service_api.financial_report_check(em_stock_one_df, period_time, period,
|
|
32
|
+
report_type)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
if __name__ == '__main__':
|
|
36
|
+
fix_profit_black_list()
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import mns_common.api.em.east_money_stock_hk_api as east_money_stock_hk_api
|
|
9
|
+
import akshare as ak
|
|
10
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
11
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
12
|
+
|
|
13
|
+
mongodb_util = MongodbUtil('27017')
|
|
14
|
+
COOKIE = 'qgqp_b_id=1e0d79428176ed54bef8434efdc0e8c3; mtp=1; ct=QVRY_s8Tiag1WfK2tSW2n03qpsX-PD8aH_rIjKVooawX8K33UVnpIofK088lD1lguWlE_OEIpQwn3PJWFPhHvSvyvYr4Zka3l4vxtZfH1Uikjtyy9z1H4Swo0rQzMKXncVzBXiOo5TjE-Dy9fcoG3ZF7UVdQ35jp_cFwzOlpK5Y; ut=FobyicMgeV51lVMr4ZJXvn-72bp0oeSOvtzifFY_U7kBFtR6og4Usd-VtBM5XBBvHq0lvd9xXkvpIqWro9EDKmv6cbKOQGyawUSMcKVP57isZCaM7lWQ6jWXajvTfvV4mIR-W_MZNK8VY0lL9W4qNMniJ6PBn_gkJsSAJCadmsyI9cxmjx--gR4m54pdF_nie_y4iWHys83cmWR2R7Bt1KKqB25OmkfCQTJJqIf7QsqangVGMUHwMC39Z9QhrfCFHKVNrlqS503O6b9GitQnXtvUdJhCmomu; pi=4253366368931142%3Bp4253366368931142%3B%E8%82%A1%E5%8F%8B9x56I87727%3BYNigLZRW%2FzMdGgVDOJbwReDWnTPHl51dB0gQLiwaCf1XY98mlJYx6eJbsoYr5Nie%2BX1L%2BzaMsec99KkX%2BT29Ds1arfST7sIBXxjUQ3dp11IPUnXy64PaBFRTHzMRWnCFJvvhc%2FAI41rXSGXolC8YMxI%2BvyPS%2BuErwgOVjC5vvsIiKeO7TLyKkhqqQJPX%2F7RWC5Sf3QLh%3Bdwjn4Xho10%2FKjqOgTWs%2FJF4%2FkdKzeuBwM8sz9aLvJovejAkCAyGMyGYA6AE67Xk2Ki7x8zdfBifF2DG%2Fvf2%2BXAYN8ZVISSEWTIXh32Z5MxEacK4JBTkqyiD93e1vFBOFQ82BqaiVmntUq0V6FrTUHGeh1gG5Sg%3D%3D; uidal=4253366368931142%e8%82%a1%e5%8f%8b9x56I87727; sid=170711377; vtpst=|; quote_lt=1; websitepoptg_api_time=1715777390466; emshistory=%5B%22%E8%BD%AC%E5%80%BA%E6%A0%87%22%2C%22%E8%BD%AC%E5%80%BA%E6%A0%87%E7%9A%84%22%5D; st_si=00364513876913; st_asi=delete; HAList=ty-116-00700-%u817E%u8BAF%u63A7%u80A1%2Cty-1-688695-%u4E2D%u521B%u80A1%u4EFD%2Cty-1-600849-%u4E0A%u836F%u8F6C%u6362%2Cty-1-603361-%u6D59%u6C5F%u56FD%u7965%2Cty-1-603555-ST%u8D35%u4EBA%2Cty-0-000627-%u5929%u8302%u96C6%u56E2%2Cty-0-002470-%u91D1%u6B63%u5927%2Cty-0-832876-%u6167%u4E3A%u667A%u80FD%2Cty-0-300059-%u4E1C%u65B9%u8D22%u5BCC%2Cty-107-CWB-%u53EF%u8F6C%u503AETF-SPDR; st_pvi=26930719093675; st_sp=2024-04-28%2017%3A27%3A05; st_inirUrl=https%3A%2F%2Fcn.bing.com%2F; st_sn=23; st_psi=20240517111108288-113200301321-2767127768'
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def get_hk_ggt_component():
|
|
18
|
+
stock_hk_ggt_components_em_df = ak.stock_hk_ggt_components_em()
|
|
19
|
+
stock_hk_ggt_components_em_df = stock_hk_ggt_components_em_df.rename(columns={
|
|
20
|
+
"序号": "index",
|
|
21
|
+
"代码": "symbol",
|
|
22
|
+
"名称": "name"
|
|
23
|
+
})
|
|
24
|
+
return stock_hk_ggt_components_em_df
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# https://quote.eastmoney.com/center/gridlist.html#hk_stocks
|
|
28
|
+
def sync_hk_company_info():
|
|
29
|
+
hk_real_time_df = east_money_stock_hk_api.hk_real_time_quotes(COOKIE)
|
|
30
|
+
|
|
31
|
+
hk_real_time_df = hk_real_time_df[[
|
|
32
|
+
"symbol",
|
|
33
|
+
"name",
|
|
34
|
+
"chg",
|
|
35
|
+
"total_mv",
|
|
36
|
+
"flow_mv",
|
|
37
|
+
"list_date",
|
|
38
|
+
"industry",
|
|
39
|
+
"amount",
|
|
40
|
+
"now_price"
|
|
41
|
+
]]
|
|
42
|
+
# 排除基金
|
|
43
|
+
hk_real_time_df = hk_real_time_df.loc[hk_real_time_df['total_mv'] != '-']
|
|
44
|
+
|
|
45
|
+
stock_hk_ggt_components_em_df = get_hk_ggt_component()
|
|
46
|
+
stock_hk_ggt_components_symbol_list = list(stock_hk_ggt_components_em_df['symbol'])
|
|
47
|
+
hk_real_time_df['hk_ggt'] = False
|
|
48
|
+
hk_real_time_df.loc[hk_real_time_df['symbol'].isin(stock_hk_ggt_components_symbol_list), 'hk_ggt'] = True
|
|
49
|
+
hk_real_time_df.loc[hk_real_time_df['industry'] == '-', 'industry'] = '其他'
|
|
50
|
+
|
|
51
|
+
hk_real_time_df['_id'] = hk_real_time_df['symbol']
|
|
52
|
+
|
|
53
|
+
hk_real_time_df.fillna(0, inplace=True)
|
|
54
|
+
|
|
55
|
+
mongodb_util.save_mongo(hk_real_time_df, db_name_constant.COMPANY_INFO_HK)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
if __name__ == '__main__':
|
|
59
|
+
sync_hk_company_info()
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import akshare as ak
|
|
9
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
10
|
+
import pandas as pd
|
|
11
|
+
from loguru import logger
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# 获取股票提问 互动易-提问
|
|
15
|
+
def get_stock_irm_cninfo(symbol):
|
|
16
|
+
try:
|
|
17
|
+
stock_irm_cninfo_df = ak.stock_irm_cninfo(symbol)
|
|
18
|
+
except Exception as e:
|
|
19
|
+
logger.error("获取提问者异常:{},{}", symbol, e)
|
|
20
|
+
return pd.DataFrame()
|
|
21
|
+
if data_frame_util.is_empty(stock_irm_cninfo_df):
|
|
22
|
+
return pd.DataFrame()
|
|
23
|
+
stock_irm_cninfo_df = stock_irm_cninfo_df.rename(columns={"股票代码": "symbol",
|
|
24
|
+
"公司简称": "name",
|
|
25
|
+
"行业": "industry",
|
|
26
|
+
"行业代码": "industry_code",
|
|
27
|
+
"问题": "question",
|
|
28
|
+
'提问者': "questioner",
|
|
29
|
+
'来源': "source",
|
|
30
|
+
'提问时间': "question_time",
|
|
31
|
+
'更新时间': "update_time",
|
|
32
|
+
"提问者编号": "questioner_no",
|
|
33
|
+
"问题编号": "question_no",
|
|
34
|
+
"回答ID": "answer_id",
|
|
35
|
+
"回答内容": "answer_content",
|
|
36
|
+
"回答者": "answer"
|
|
37
|
+
})
|
|
38
|
+
return stock_irm_cninfo_df
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
if __name__ == '__main__':
|
|
42
|
+
get_stock_irm_cninfo('301191')
|
|
@@ -13,6 +13,7 @@ import mns_common.utils.date_handle_util as date_handle_util
|
|
|
13
13
|
import mns_common.component.k_line.patterns.k_line_patterns_service_api as k_line_patterns_service
|
|
14
14
|
import mns_common.component.k_line.clean.sh_small_normal_zt_k_line_check_api as sh_small_normal_zt_k_line_check_api
|
|
15
15
|
import mns_common.component.classify.symbol_classify_api as symbol_classify_api
|
|
16
|
+
import mns_common.component.k_line.common.k_line_common_service_api as k_line_common_service_api
|
|
16
17
|
|
|
17
18
|
mongodb_util = MongodbUtil('27017')
|
|
18
19
|
# 排除最近10天有三个连板的股票
|
|
@@ -119,11 +120,11 @@ def handle_week_line(k_line_info, str_day, symbol):
|
|
|
119
120
|
|
|
120
121
|
# 处理日线
|
|
121
122
|
def handle_day_line(k_line_info, str_day, symbol):
|
|
122
|
-
|
|
123
|
-
query = {"symbol": symbol, 'date': {"$lt": date_handle_util.no_slash_date(str_day)}}
|
|
124
|
-
deal_days = mongodb_util.count(query, 'stock_qfq_daily')
|
|
123
|
+
deal_days = k_line_common_service_api.get_deal_days(str_day, symbol)
|
|
125
124
|
|
|
126
125
|
# 取五天刚好包含一周 todo 选择60天的历史记录
|
|
126
|
+
# 当天没有k线数据时 进行同步
|
|
127
|
+
query = {"symbol": symbol, 'date': {"$lt": date_handle_util.no_slash_date(str_day)}}
|
|
127
128
|
stock_qfq_daily = mongodb_util.descend_query(query, 'stock_qfq_daily', 'date', 60)
|
|
128
129
|
if stock_qfq_daily.shape[0] == 0:
|
|
129
130
|
return k_line_info
|
|
@@ -406,15 +407,18 @@ def set_history_list(stock_qfq_daily_one, stock_qfq_daily):
|
|
|
406
407
|
stock_qfq_daily_ten = stock_qfq_daily.iloc[0:10]
|
|
407
408
|
# 计算 amount 的标准差
|
|
408
409
|
std_amount_ten = round(stock_qfq_daily_ten['amount_level'].std(), 2)
|
|
410
|
+
# 计算 amount 的平均值
|
|
409
411
|
mean_amount_ten = round(stock_qfq_daily_ten['amount_level'].mean(), 2)
|
|
410
412
|
|
|
411
413
|
if daily_num >= 30:
|
|
412
414
|
stock_qfq_daily_thirty = stock_qfq_daily.iloc[0:30]
|
|
413
415
|
# 计算 amount 的标准差
|
|
414
416
|
std_amount_thirty = round(stock_qfq_daily_thirty['amount_level'].std(), 2)
|
|
417
|
+
# 计算 amount 的平均值
|
|
415
418
|
mean_amount_thirty = round(stock_qfq_daily_thirty['amount_level'].mean(), 2)
|
|
416
419
|
if daily_num >= 60:
|
|
417
420
|
std_amount_sixty = round(stock_qfq_daily['amount_level'].std(), 2)
|
|
421
|
+
# 计算 amount 的平均值
|
|
418
422
|
mean_amount_sixty = round(stock_qfq_daily['amount_level'].mean(), 2)
|
|
419
423
|
|
|
420
424
|
# text = list(stock_qfq_daily_one['history_data'])[0]
|
|
@@ -70,7 +70,10 @@ def sync_new_high_risk_stocks():
|
|
|
70
70
|
begin_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_day), -before_days)
|
|
71
71
|
begin_day = begin_date.strftime('%Y-%m-%d')
|
|
72
72
|
search_key = '立案'
|
|
73
|
-
|
|
73
|
+
|
|
74
|
+
end_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_day), 1)
|
|
75
|
+
end_day = end_date.strftime('%Y-%m-%d')
|
|
76
|
+
new_high_risk_stocks_df = sync_all_investigate_stocks(const_num, search_key, begin_day, end_day)
|
|
74
77
|
if data_frame_util.is_empty(new_high_risk_stocks_df):
|
|
75
78
|
return None
|
|
76
79
|
new_high_risk_stocks_df = new_high_risk_stocks_df.sort_values(by=['announcementTime'], ascending=False)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
|
|
9
|
+
# 股权质押 https://data.eastmoney.com/gpzy/pledgeRatio.aspx
|
|
10
|
+
|
|
11
|
+
import requests
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def get_equity_mortgage():
|
|
15
|
+
url = (
|
|
16
|
+
'https://datacenter-web.eastmoney.com/api/data/v1/get?callback=jQuery1123018114616341595302_1715993497168&sortColumns=PLEDGE_RATIO&sortTypes=-1'
|
|
17
|
+
'&pageSize=50000'
|
|
18
|
+
'&pageNumber=1'
|
|
19
|
+
'&reportName=RPT_CSDC_LIST&columns=ALL"eColumns=&source=WEB'
|
|
20
|
+
'&client=WEB'
|
|
21
|
+
'&filter=(TRADE_DATE%3D%272024-05-17%27)')
|
|
22
|
+
|
|
23
|
+
headers = {
|
|
24
|
+
"Content-Type": "application/json"
|
|
25
|
+
}
|
|
26
|
+
r = requests.post(url, headers=headers)
|
|
27
|
+
data_json = r.json()
|
|
28
|
+
print(data_json)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
if __name__ == '__main__':
|
|
32
|
+
get_equity_mortgage()
|
mns_scheduler/zt/__init__.py
CHANGED
|
@@ -5,3 +5,33 @@ file_path = os.path.abspath(__file__)
|
|
|
5
5
|
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
|
+
# from mns_common.db.MongodbUtil import MongodbUtil
|
|
9
|
+
# import mns_common.component.k_line.common.k_line_common_service_api as k_line_common_service_api
|
|
10
|
+
#
|
|
11
|
+
# mongodb_util = MongodbUtil('27017')
|
|
12
|
+
# # query = {"deal_days": {"$exists": False}}
|
|
13
|
+
# deal_days = 8
|
|
14
|
+
# fail_id_list = []
|
|
15
|
+
# while True:
|
|
16
|
+
# query = {"deal_days": deal_days}
|
|
17
|
+
# realtime_quotes_now_zt_new_kc_open_df = mongodb_util.find_query_data('realtime_quotes_now_zt_new_kc_open', query)
|
|
18
|
+
#
|
|
19
|
+
# for stock_one in realtime_quotes_now_zt_new_kc_open_df.itertuples():
|
|
20
|
+
# try:
|
|
21
|
+
# str_day = stock_one.str_day
|
|
22
|
+
# deal_days = k_line_common_service_api.get_deal_days(str_day, stock_one.symbol)
|
|
23
|
+
#
|
|
24
|
+
# realtime_quotes_now_zt_new_kc_open_one = realtime_quotes_now_zt_new_kc_open_df.loc[
|
|
25
|
+
# (realtime_quotes_now_zt_new_kc_open_df['symbol'] == stock_one.symbol)
|
|
26
|
+
# & (realtime_quotes_now_zt_new_kc_open_df['str_day'] == stock_one.str_day)]
|
|
27
|
+
#
|
|
28
|
+
# realtime_quotes_now_zt_new_kc_open_one['deal_days'] = deal_days
|
|
29
|
+
#
|
|
30
|
+
# mongodb_util.save_mongo(realtime_quotes_now_zt_new_kc_open_one, 'realtime_quotes_now_zt_new_kc_open')
|
|
31
|
+
# except Exception as e:
|
|
32
|
+
# mongodb_util.insert_mongo(realtime_quotes_now_zt_new_kc_open_one, 'realtime_quotes_now_zt_new_kc_open_fail')
|
|
33
|
+
# print(stock_one.symbol)
|
|
34
|
+
# deal_days = deal_days + 1
|
|
35
|
+
# if deal_days > 3479:
|
|
36
|
+
# print(deal_days)
|
|
37
|
+
# break
|
|
@@ -17,6 +17,7 @@ import pandas as pd
|
|
|
17
17
|
from datetime import time
|
|
18
18
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
19
19
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
20
|
+
import mns_common.component.k_line.common.k_line_common_service_api as k_line_common_service_api
|
|
20
21
|
|
|
21
22
|
mongodb_util = MongodbUtil('27017')
|
|
22
23
|
mongodb_util_21019 = MongodbUtil('27019')
|
|
@@ -223,6 +224,10 @@ def one_symbol_day_open_data(realtime_quotes_now_kc, kc_one, str_day):
|
|
|
223
224
|
del realtime_quotes_now_zt_new_kc_open_copy['str_day_01']
|
|
224
225
|
del realtime_quotes_now_zt_new_kc_open_copy['list_date_01']
|
|
225
226
|
|
|
227
|
+
deal_days = k_line_common_service_api.get_deal_days(str_day, kc_one.symbol)
|
|
228
|
+
|
|
229
|
+
realtime_quotes_now_zt_new_kc_open_copy['deal_days'] = deal_days
|
|
230
|
+
|
|
226
231
|
mongodb_util.save_mongo(realtime_quotes_now_zt_new_kc_open_copy, 'realtime_quotes_now_zt_new_kc_open')
|
|
227
232
|
|
|
228
233
|
|
|
@@ -337,7 +342,7 @@ def fix_miss_data(str_end):
|
|
|
337
342
|
|
|
338
343
|
|
|
339
344
|
if __name__ == '__main__':
|
|
340
|
-
sync_all_kc_zt_data('2024-05-
|
|
345
|
+
sync_all_kc_zt_data('2024-05-17', None)
|
|
341
346
|
# sync_all_kc_zt_data('2023-08-16')
|
|
342
347
|
# sync_all_kc_zt_data('2023-07-07')
|
|
343
348
|
# realtime_quotes_now_zt_new_kc_open_sync()
|
|
@@ -466,7 +466,7 @@ def stock_qfq_daily_high_chg_pool(str_day):
|
|
|
466
466
|
|
|
467
467
|
|
|
468
468
|
if __name__ == '__main__':
|
|
469
|
-
sync_one_day_zt_info('
|
|
469
|
+
sync_one_day_zt_info('2024-05-17')
|
|
470
470
|
|
|
471
471
|
# sync_date = date_handle_util.add_date_day('20221022', 0)
|
|
472
472
|
# now_date = datetime.now()
|
|
@@ -395,7 +395,7 @@ blockingScheduler.add_job(sync_kpl_best_his_quotes, 'cron', hour='18,22', minute
|
|
|
395
395
|
blockingScheduler.add_job(sync_position, 'cron', hour='0,08', minute='10')
|
|
396
396
|
|
|
397
397
|
# 同步被立案调查的股票
|
|
398
|
-
blockingScheduler.add_job(sync_new_high_risk_stocks, 'cron', hour='0,09', minute='20')
|
|
398
|
+
blockingScheduler.add_job(sync_new_high_risk_stocks, 'cron', hour='0,09,12,16', minute='20')
|
|
399
399
|
|
|
400
400
|
print('定时任务启动成功')
|
|
401
401
|
blockingScheduler.start()
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
mns_scheduler/__init__.py,sha256=
|
|
1
|
+
mns_scheduler/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
|
|
2
2
|
mns_scheduler/backup/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
3
3
|
mns_scheduler/backup/app/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
4
4
|
mns_scheduler/backup/app/ths_new_concept_sync_app.py,sha256=yBr3RN24zCWgmRVCKgY6fwm0tdJA5XKliK3CSB-75tY,5148
|
|
@@ -11,9 +11,9 @@ mns_scheduler/backup/wen_cai/wen_cai_concept_sync.py,sha256=boKtgOIXIsRny5n1keZm
|
|
|
11
11
|
mns_scheduler/big_deal/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
12
12
|
mns_scheduler/big_deal/ths_big_deal_sync.py,sha256=wezGJWFRnKYBaPP9PVXLqMbHENOXgvJtw3HSGCSlX5c,4555
|
|
13
13
|
mns_scheduler/company_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
14
|
-
mns_scheduler/company_info/company_constant_data.py,sha256=
|
|
15
|
-
mns_scheduler/company_info/company_info_sync_api.py,sha256=
|
|
16
|
-
mns_scheduler/company_info/de_list_stock_service.py,sha256=
|
|
14
|
+
mns_scheduler/company_info/company_constant_data.py,sha256=g1SSGgNT5QsS-zUNW_zrXD3pZXgSkyjsFLZgWeh7daU,14306
|
|
15
|
+
mns_scheduler/company_info/company_info_sync_api.py,sha256=J7CwDMzw8oLadwslx7Jka5K5IRIRQVwTmL4tRXz-5mU,21598
|
|
16
|
+
mns_scheduler/company_info/de_list_stock_service.py,sha256=GCp6hlvO-SuH1oIpEsYZwEnGUOa6fXb2D7CqAUYXKQA,1993
|
|
17
17
|
mns_scheduler/concept/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
18
18
|
mns_scheduler/concept/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
19
19
|
mns_scheduler/concept/clean/kpl_concept_clean_api.py,sha256=xxIIgrXLI6xLf10t4unJa7aMB_QeKeki1HJVeXsntkY,4512
|
|
@@ -34,14 +34,20 @@ mns_scheduler/db/db_status.py,sha256=K1jtYIGZzDV6knpoJLLnXEhN3tyziJp_zY2gSfguHCA
|
|
|
34
34
|
mns_scheduler/dt/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
35
35
|
mns_scheduler/dt/stock_dt_pool_sync.py,sha256=5ivRUOnFtOapZniwTbujf1lVq3y4btm2Cmd5R6JJAVo,3466
|
|
36
36
|
mns_scheduler/finance/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
37
|
-
mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py,sha256=
|
|
38
|
-
mns_scheduler/finance/em_financial_profit_sync_service_api.py,sha256=
|
|
39
|
-
mns_scheduler/finance/finance_common_api.py,sha256=
|
|
40
|
-
mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py,sha256=
|
|
41
|
-
mns_scheduler/finance/sync_financial_report_service_api.py,sha256=
|
|
37
|
+
mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py,sha256=yr257AZ6PU4BoXzgVw8seGjmfEJd5bniaXO6FOONr1k,19437
|
|
38
|
+
mns_scheduler/finance/em_financial_profit_sync_service_api.py,sha256=7gnrn6OyMU4sxrvXXgzrj-EP914KwRpJW76XgKuWO0Q,14145
|
|
39
|
+
mns_scheduler/finance/finance_common_api.py,sha256=e72-c6xcFaS4Z9wq9Yx2_HZ7PdStMeP6s4O61yeTKmc,2471
|
|
40
|
+
mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py,sha256=sPc_APiq--67wBnpLI-6Kgm0Z1j463196oxBn9AFRbE,10561
|
|
41
|
+
mns_scheduler/finance/sync_financial_report_service_api.py,sha256=5e8VdvT52YpJTBlk-H-EDboc5hacmF9osvfkumgZElI,5042
|
|
42
|
+
mns_scheduler/finance/test/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
43
|
+
mns_scheduler/finance/test/fix_blask_list.py,sha256=sXmNcnfnjKHBylc27ysCCb9G4HYlFDAxOY4eHDnkIGE,1304
|
|
44
|
+
mns_scheduler/hk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
45
|
+
mns_scheduler/hk/hk_company_info_sync_service_api.py,sha256=JEfIl_up36b1UpDxfPhosP6_i2Lo17Ma_GHLytoMjWI,3661
|
|
46
|
+
mns_scheduler/irm/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
47
|
+
mns_scheduler/irm/stock_irm_cninfo_service.py,sha256=yl6A6eknmfgHWZB5EdeHeUalEGX3D7Cmw3gbBnhtsuk,2086
|
|
42
48
|
mns_scheduler/k_line/__init__.py,sha256=ffZXFCLFdIwOsbxnw__u1MbQYh9yz7Bs8UMP6VF0X2M,161
|
|
43
49
|
mns_scheduler/k_line/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
44
|
-
mns_scheduler/k_line/clean/k_line_info_clean_impl.py,sha256=
|
|
50
|
+
mns_scheduler/k_line/clean/k_line_info_clean_impl.py,sha256=t1arXrYeAGrkiCMVpXSQEBZowmKMPYikDTwPot-bJWY,22057
|
|
45
51
|
mns_scheduler/k_line/clean/k_line_info_clean_service.py,sha256=zsb6HmyD4eqN7b135S4UgFR8U1vBLwqEZA1kIc8RuQ0,7988
|
|
46
52
|
mns_scheduler/k_line/sync/__init__.py,sha256=ffZXFCLFdIwOsbxnw__u1MbQYh9yz7Bs8UMP6VF0X2M,161
|
|
47
53
|
mns_scheduler/k_line/sync/daily_week_month_line_sync.py,sha256=MsBY-GtDXu9Eyd2nYanvSsLSTFnXIUq0BlQG4ptknqQ,5652
|
|
@@ -58,23 +64,24 @@ mns_scheduler/real_time/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy
|
|
|
58
64
|
mns_scheduler/real_time/realtime_quotes_now_create_db_index.py,sha256=qQCjcsG3WYgn3zemS45Ms0AHtbkCwlSVPPCntxVvK8Q,1066
|
|
59
65
|
mns_scheduler/real_time/realtime_quotes_now_sync.py,sha256=XIz454cysRO-xfdgsEw3glR0LgTxFdZoCNONd4O7EgM,9165
|
|
60
66
|
mns_scheduler/risk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
61
|
-
mns_scheduler/risk/register_and_investigate_stock_sync_api.py,sha256=
|
|
67
|
+
mns_scheduler/risk/register_and_investigate_stock_sync_api.py,sha256=pjVGZbSWQn6obobaJxsXQK7jeRrNQJ6kcwStQEj9R18,5086
|
|
68
|
+
mns_scheduler/risk/stock_equity_mortgage_sync_api.py,sha256=MNj4kZ3VxxDwzFQjx-NuAGmOKcGnTaQIzGswdP_3pWc,871
|
|
62
69
|
mns_scheduler/trade/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
63
70
|
mns_scheduler/trade/auto_ipo_buy_api.py,sha256=QXNzFJGNGveVUcXBh0RRJb_HV7abbLYXRljezPJf9ZM,377
|
|
64
71
|
mns_scheduler/trade/auto_sell_service_api.py,sha256=HaauZeOsuLNBrowXT8IKaSgWLR2Huott6mg_AoLhpUY,4423
|
|
65
72
|
mns_scheduler/trade/sync_position_api.py,sha256=HmREr4H-PqlOdlNx3_SN6vRaRnhlaLCI6keSlYuXJHc,2739
|
|
66
73
|
mns_scheduler/zb/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
|
|
67
74
|
mns_scheduler/zb/stock_zb_pool_sync.py,sha256=ky3CNDzpjB6C_frCf4YGNXdidnUo-uUUKsJpY62P4Bk,1936
|
|
68
|
-
mns_scheduler/zt/__init__.py,sha256=
|
|
75
|
+
mns_scheduler/zt/__init__.py,sha256=Rzolrn2R5RZIj-eOmu9KcL6oZBY9Wjz_uBFXPlzirQc,1641
|
|
69
76
|
mns_scheduler/zt/export_open_data_to_excel.py,sha256=haOSmh-aXnScp58u0mLE_QvcWIIuRfwxgmyF-XQMk_U,4015
|
|
70
|
-
mns_scheduler/zt/realtime_quotes_now_zt_kc_sync.py,sha256=
|
|
71
|
-
mns_scheduler/zt/today_high_chg_pool_sync_api.py,sha256=
|
|
77
|
+
mns_scheduler/zt/realtime_quotes_now_zt_kc_sync.py,sha256=3CloQrZ5x3REesBsPYenl0wL0XXN8DtMbcngrBi5IgQ,17525
|
|
78
|
+
mns_scheduler/zt/today_high_chg_pool_sync_api.py,sha256=KfEp2Mu8dZKB8DBai4m0UpZwgkiYpKfg_pdmWSECZwo,21283
|
|
72
79
|
mns_scheduler/zt/zt_five_boards_sync_api.py,sha256=HfjPHKD99fU9c37kSenEX2_qNvFAjQGgy8ERuacSxwk,10916
|
|
73
80
|
mns_scheduler/zt/zt_pool_sync_api.py,sha256=RrVAbU1u-HTqXF9BSwNlzIxMHrUgjNaLpDKFgXC1XuY,7604
|
|
74
81
|
mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
75
|
-
mns_scheduler/zz_task/data_sync_task.py,sha256=
|
|
82
|
+
mns_scheduler/zz_task/data_sync_task.py,sha256=ftMN3POBxSRz9qPh4BjLJB-3VU3yVlZxZxOLD-l2lIU,16262
|
|
76
83
|
mns_scheduler/zz_task/sync_realtime_quotes_task.py,sha256=DN3bq2XCDZC-PHlbD2NTog48bR44EruIEc2QVGKg7Tk,932
|
|
77
|
-
mns_scheduler-1.0.4.
|
|
78
|
-
mns_scheduler-1.0.4.
|
|
79
|
-
mns_scheduler-1.0.4.
|
|
80
|
-
mns_scheduler-1.0.4.
|
|
84
|
+
mns_scheduler-1.0.5.4.dist-info/METADATA,sha256=OyLc4UHODz7Sk4gFockOr5CkH98LCxjipGqPbOviZm0,64
|
|
85
|
+
mns_scheduler-1.0.5.4.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
86
|
+
mns_scheduler-1.0.5.4.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
|
|
87
|
+
mns_scheduler-1.0.5.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|