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

@@ -22,6 +22,7 @@ def annual_report_audit_check(new_report_df, period_time):
22
22
  opinion_type = list(new_report_one_df['OPINION_TYPE'])[0]
23
23
  symbol = list(new_report_one_df['SECURITY_CODE'])[0]
24
24
  name = list(new_report_one_df['SECURITY_NAME_ABBR'])[0]
25
+ notice_date = list(new_report_one_df['NOTICE_DATE'])[0]
25
26
  now_date = datetime.now()
26
27
  str_day = now_date.strftime('%Y-%m-%d')
27
28
  str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
@@ -33,7 +34,7 @@ def annual_report_audit_check(new_report_df, period_time):
33
34
  symbol,
34
35
  name,
35
36
  str_day,
36
- str_now_date,
37
+ notice_date,
37
38
  '年报审计有问题:' + "[" + str(opinion_type) + "]",
38
39
  '年报审计有问题',
39
40
  '',
@@ -31,7 +31,7 @@ def net_assets_check(report_type, new_report_df, period_time):
31
31
  str_day = now_date.strftime('%Y-%m-%d')
32
32
  str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
33
33
  id_key = symbol + "_" + period_time + "_" + BlackClassify.FINANCIAL_PROBLEM_DEBT.level_code
34
-
34
+ notice_date = list(new_report_one_df['NOTICE_DATE'])[0]
35
35
  query_company = {'_id': symbol, 'industry': {'$in': EXCLUDE_INDUSTRY}}
36
36
  if mongodb_util.exist_data_query(db_name_constant.COMPANY_INFO, query_company):
37
37
  return None
@@ -41,7 +41,7 @@ def net_assets_check(report_type, new_report_df, period_time):
41
41
  symbol,
42
42
  name,
43
43
  str_day,
44
- str_now_date,
44
+ notice_date,
45
45
  '负债过高:' + "[" + str(
46
46
  liability_ratio) + "]" + "," + "净资产:"
47
47
  + str(round(net_asset / common_service_fun_api.HUNDRED_MILLION,
@@ -26,7 +26,7 @@ def profit_income_check(new_report_df, period_time, report_type):
26
26
  now_date = datetime.now()
27
27
  str_day = now_date.strftime('%Y-%m-%d')
28
28
  str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
29
-
29
+ notice_date = list(new_report_one_df['NOTICE_DATE'])[0]
30
30
  if report_type == db_name_constant.EM_STOCK_PROFIT:
31
31
  # 利润总额 净利润 扣除非经常性损益后的净利润 三者最小为负
32
32
  # 利润总额
@@ -63,7 +63,7 @@ def profit_income_check(new_report_df, period_time, report_type):
63
63
  symbol,
64
64
  name,
65
65
  str_day,
66
- str_now_date,
66
+ notice_date,
67
67
  '年报:利润:' + '[' + str(min_profit) + '万]' + '收入:' + str(
68
68
  total_operate_income) + '[' + '亿元]--' + '触发退市风险',
69
69
  '年报:利润:' + '[' + str(min_profit) + '万]' + '收入:' + str(
@@ -0,0 +1,165 @@
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_api as east_money_stock_api
9
+ from datetime import datetime
10
+ import mns_common.component.self_choose.black_list_service_api as black_list_service_api
11
+ import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
12
+ from loguru import logger
13
+ import mns_common.constant.db_name_constant as db_name_constant
14
+ from mns_common.db.MongodbUtil import MongodbUtil
15
+ import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
16
+ from mns_common.constant.black_list_classify_enum import BlackClassify
17
+ import mns_common.component.common_service_fun_api as common_service_fun_api
18
+ import mns_common.utils.date_handle_util as date_handle_util
19
+
20
+ mongodb_util = MongodbUtil('27017')
21
+
22
+ # 主板 市值最小值 6亿 20个交易日低于5亿退市
23
+ MAIN_MARKET_MIN_MV = 600000000
24
+
25
+ # 创业 科创 北交所 市值最小值 4亿 20个交易日低于3亿退市
26
+ SUB_MARKET_MIN_MV = 400000000
27
+
28
+ # 最小面值 20个交易日低于1元退市
29
+ MIN_NOW_PRICE = 1.5
30
+
31
+ # 主板 120个交易日 参考600万 成交量低于500万股
32
+ MAIN_MARKET_MIN_VOLUME = 6000000
33
+
34
+ # 科创 创业 120个交易日 参考300万 成交量低于200万股
35
+ SUB_MARKET_MIN_VOLUME = 3000000
36
+
37
+ # 北交所 120个交易日 参考150万 成交量低于100万股
38
+ BJS_MARKET_MIN_VOLUME = 1500000
39
+
40
+
41
+ def transactions_check_task():
42
+ real_time_quotes_now = east_money_stock_api.get_real_time_quotes_all_stocks()
43
+ real_time_quotes_now = common_service_fun_api.classify_symbol(real_time_quotes_now)
44
+ real_time_quotes_now = common_service_fun_api.exclude_ts_symbol(real_time_quotes_now)
45
+
46
+ de_list_symbol = company_common_service_new_api.get_de_list_company()
47
+
48
+ real_time_quotes_now = real_time_quotes_now.loc[~(real_time_quotes_now['symbol'].isin(de_list_symbol))]
49
+
50
+ query = {"up_level_code": BlackClassify.TRANSACTIONS.level_code}
51
+ tag = mongodb_util.remove_data(query, db_name_constant.SELF_BLACK_STOCK)
52
+ success = tag.acknowledged
53
+ if success:
54
+
55
+ for stock_one in real_time_quotes_now.itertuples():
56
+ try:
57
+ total_mv_check(stock_one)
58
+ now_price_check(stock_one)
59
+ volume_check(stock_one)
60
+ except BaseException as e:
61
+ logger.error("交易风险校验异常:{},{}", e, stock_one.symbol)
62
+
63
+
64
+ # 总市值check
65
+ def total_mv_check(stock_one):
66
+ classification = stock_one.classification
67
+ total_mv = stock_one.total_mv
68
+ now_date = datetime.now()
69
+ str_day = now_date.strftime('%Y-%m-%d')
70
+ str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
71
+ key_id = stock_one.symbol + "_" + BlackClassify.MV_RISK.level_code
72
+ tag = False
73
+ if classification in ['S', 'H'] and total_mv < MAIN_MARKET_MIN_MV:
74
+ tag = True
75
+ elif classification in ['K', 'C', "X"] and total_mv < SUB_MARKET_MIN_MV:
76
+ tag = True
77
+
78
+ if tag:
79
+ black_list_service_api.save_black_stock(
80
+ key_id,
81
+ stock_one.symbol,
82
+ stock_one.name,
83
+ str_day,
84
+ str_now_date,
85
+ BlackClassify.MV_RISK.level_name + ":" + str(
86
+ round(total_mv / common_service_fun_api.HUNDRED_MILLION, 2)) + "亿",
87
+ BlackClassify.MV_RISK.level_name + ":" + str(
88
+ round(total_mv / common_service_fun_api.HUNDRED_MILLION, 2)) + "亿",
89
+ "",
90
+ BlackClassify.MV_RISK.up_level_code,
91
+ BlackClassify.MV_RISK.up_level_name,
92
+ BlackClassify.MV_RISK.level_code,
93
+ BlackClassify.MV_RISK.level_name,
94
+ )
95
+
96
+
97
+ # 当前面值check
98
+ def now_price_check(stock_one):
99
+ now_price = stock_one.now_price
100
+ now_date = datetime.now()
101
+ str_day = now_date.strftime('%Y-%m-%d')
102
+ str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
103
+ key_id = stock_one.symbol + "_" + BlackClassify.CLOSE_PRICE_RISK.level_code
104
+ if now_price < MIN_NOW_PRICE:
105
+ black_list_service_api.save_black_stock(
106
+ key_id,
107
+ stock_one.symbol,
108
+ stock_one.name,
109
+ str_day,
110
+ str_now_date,
111
+ BlackClassify.CLOSE_PRICE_RISK.level_name + ":当前价格" + str(now_price),
112
+ BlackClassify.CLOSE_PRICE_RISK.level_name + ":当前价格" + str(now_price),
113
+ "",
114
+ BlackClassify.CLOSE_PRICE_RISK.up_level_code,
115
+ BlackClassify.CLOSE_PRICE_RISK.up_level_name,
116
+ BlackClassify.CLOSE_PRICE_RISK.level_code,
117
+ BlackClassify.CLOSE_PRICE_RISK.level_name,
118
+ )
119
+
120
+
121
+ #
122
+ def volume_check(stock_one):
123
+ now_date = datetime.now()
124
+ str_day = now_date.strftime('%Y-%m-%d')
125
+ str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
126
+ trade_date_120 = trade_date_common_service_api.get_before_trade_date(str_day, 120)
127
+ query = {'date': {"$gte": date_handle_util.no_slash_date(trade_date_120)}, 'symbol': stock_one.symbol}
128
+ stock_qfq_daily_df = mongodb_util.find_query_data(db_name_constant.STOCK_QFQ_DAILY, query)
129
+ if stock_qfq_daily_df.shape[0] < 120:
130
+ return
131
+ # volume 单位是100股
132
+ sum_volume = sum(stock_qfq_daily_df['volume']) * 100
133
+ key_id = stock_one.symbol + "_" + BlackClassify.AMOUNT_RISK.level_code
134
+ tag = False
135
+ classification = stock_one.classification
136
+ if classification in ['S', 'H'] and sum_volume < MAIN_MARKET_MIN_VOLUME:
137
+ tag = True
138
+
139
+ elif classification in ['K', 'C'] and sum_volume < SUB_MARKET_MIN_VOLUME:
140
+ tag = True
141
+
142
+ elif classification in ['X'] and sum_volume < BJS_MARKET_MIN_VOLUME:
143
+ tag = True
144
+
145
+ if tag:
146
+ black_list_service_api.save_black_stock(
147
+ key_id,
148
+ stock_one.symbol,
149
+ stock_one.name,
150
+ str_day,
151
+ str_now_date,
152
+ BlackClassify.AMOUNT_RISK.level_name + ":120个交易日成交量:" + str(
153
+ round(sum_volume / common_service_fun_api.TEN_THOUSAND), 0) + "万股",
154
+ BlackClassify.AMOUNT_RISK.level_name + ":120个交易日成交量:" + str(
155
+ round(sum_volume / common_service_fun_api.TEN_THOUSAND), 0) + "万股",
156
+ "",
157
+ BlackClassify.AMOUNT_RISK.up_level_code,
158
+ BlackClassify.AMOUNT_RISK.up_level_name,
159
+ BlackClassify.AMOUNT_RISK.level_code,
160
+ BlackClassify.AMOUNT_RISK.level_name,
161
+ )
162
+
163
+
164
+ if __name__ == '__main__':
165
+ transactions_check_task()
@@ -46,6 +46,7 @@ import mns_scheduler.open.sync_one_day_open_data_to_db_service as sync_one_day_o
46
46
  import mns_scheduler.zt.high_chg.sync_high_chg_pool_service as sync_high_chg_pool_service
47
47
  import mns_scheduler.zt.high_chg.sync_high_chg_real_time_quotes_service as sync_high_chg_real_time_quotes_service
48
48
  import mns_scheduler.risk.self.wei_pan_stock_api as wei_pan_stock_api
49
+ import mns_scheduler.risk.transactions.transactions_check_api as transactions_check_api
49
50
 
50
51
 
51
52
  # 同步交易日期任务完成
@@ -325,13 +326,15 @@ def sync_kpl_best_his_quotes():
325
326
  logger.info('同步开盘啦当日精选指数行情数据任务完成')
326
327
 
327
328
 
328
- # 同步被立案调查的股票
329
+ # 同步高风险的股票
329
330
  def sync_new_high_risk_stocks():
330
331
  logger.info('同步被立案调查的股票')
331
332
  register_and_investigate_stock_sync_api.sync_new_high_risk_stocks()
332
333
  reason_detail = '微盘股拉黑'
333
334
  concept_code_wei_pan = '883418'
334
335
  wei_pan_stock_api.add_concept_to_lack_list(concept_code_wei_pan, reason_detail)
336
+ logger.info('同步交易类风险的股票')
337
+ transactions_check_api.transactions_check_task()
335
338
 
336
339
 
337
340
  # 同步互动回答
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.0.9.1
3
+ Version: 1.0.9.2
4
4
 
@@ -84,15 +84,16 @@ mns_scheduler/risk/financial_report_risk_check_api.py,sha256=BPkMZ7aINfOFPswIV11
84
84
  mns_scheduler/risk/compliance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
85
  mns_scheduler/risk/compliance/undisclosed_annual_report_api.py,sha256=4kY6mgDsZ-zd6W8E3awURwgP3Y71rNqwDkWTAFw8hZk,3676
86
86
  mns_scheduler/risk/financial/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
- mns_scheduler/risk/financial/annual_report_audit_check_api.py,sha256=SEU5N7y6JwlKTY0gGEw43Rq9nANCACaNVrV0ltpfknY,2065
88
- mns_scheduler/risk/financial/net_assets_check_api.py,sha256=6o0DdsisVRY9LFLh22zjLyEIQrJ4PvfkeVtTIA43ICo,3091
89
- mns_scheduler/risk/financial/profit_income_check_api.py,sha256=wdWxFK8TfEEbPYW__XbL41FzcBgOW79BP_z_Ulp9UUM,4300
87
+ mns_scheduler/risk/financial/annual_report_audit_check_api.py,sha256=HxQNxlVSPusBkB9k96qUNfIcImlTYHA5Dmr11jAx_LY,2125
88
+ mns_scheduler/risk/financial/net_assets_check_api.py,sha256=P2DBTCetheuL86HhnIdyTDEm_-NfaqgDHug6npE9O1Q,3153
89
+ mns_scheduler/risk/financial/profit_income_check_api.py,sha256=4iGZEIveq5SIOBziyMH72oxSKbQJ3WfyjUMhDJfxUEU,4358
90
90
  mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py,sha256=SQ7dieSCOf1z42Wi1zDEii3poAT5wfyBrV43dXkAaaw,22
91
91
  mns_scheduler/risk/major_violations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
92
  mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py,sha256=TcvYKPZzsyQMRi51EfJwH4Ph-aD8cY_Tn8nnTIxvun4,5386
93
93
  mns_scheduler/risk/self/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
94
  mns_scheduler/risk/self/wei_pan_stock_api.py,sha256=PRaFmdnQ7763ngEYAcBkQ7FGP9CJENJZnLfO7bAn1c0,1846
95
95
  mns_scheduler/risk/transactions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
+ mns_scheduler/risk/transactions/transactions_check_api.py,sha256=_VOiUyIPyTGbcrbuxzJnp1KiLdKBJsRS584f-jqHXA0,6682
96
97
  mns_scheduler/trade/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
97
98
  mns_scheduler/trade/auto_ipo_buy_api.py,sha256=QXNzFJGNGveVUcXBh0RRJb_HV7abbLYXRljezPJf9ZM,377
98
99
  mns_scheduler/trade/auto_sell_service_api.py,sha256=HaauZeOsuLNBrowXT8IKaSgWLR2Huott6mg_AoLhpUY,4423
@@ -115,9 +116,9 @@ mns_scheduler/zt/script/sync_high_chg_pool_his_data.py,sha256=R0syG5gcXRlLxswbBl
115
116
  mns_scheduler/zt/zt_pool/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
116
117
  mns_scheduler/zt/zt_pool/zt_pool_sync_api.py,sha256=Uca9fcnxIiz5Pfe1Ot_IgRu7zA7KqM7wtOHkMKF2kSo,7604
117
118
  mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
118
- mns_scheduler/zz_task/data_sync_task.py,sha256=1iXh3fHv4l9zDBrXTo8UDHrL-Uqv3anmMlAKQp_XkDo,17620
119
+ mns_scheduler/zz_task/data_sync_task.py,sha256=BK5ZEZ9DOB8hL48leKeCZwZfIoVhcbzrfm9B6gZyJFc,17808
119
120
  mns_scheduler/zz_task/sync_realtime_quotes_task.py,sha256=DN3bq2XCDZC-PHlbD2NTog48bR44EruIEc2QVGKg7Tk,932
120
- mns_scheduler-1.0.9.1.dist-info/METADATA,sha256=XDHm91d_xMtqGQteVbhIbG-K48lv77Yw_uDXGLZX3lo,64
121
- mns_scheduler-1.0.9.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
122
- mns_scheduler-1.0.9.1.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
123
- mns_scheduler-1.0.9.1.dist-info/RECORD,,
121
+ mns_scheduler-1.0.9.2.dist-info/METADATA,sha256=4kQYOPjdrUcj_5zlPl8EATCD6F3VMarhISCpGR9wCoU,64
122
+ mns_scheduler-1.0.9.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
123
+ mns_scheduler-1.0.9.2.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
124
+ mns_scheduler-1.0.9.2.dist-info/RECORD,,