mns-scheduler 1.1.8.4__py3-none-any.whl → 1.4.5.7__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.
- mns_scheduler/__init__.py +1 -3
- mns_scheduler/auto_da_ban/auto_da_ban_service.py +89 -0
- mns_scheduler/company_info/clean/__init__.py +1 -1
- mns_scheduler/company_info/clean/company_info_clean_api.py +62 -21
- mns_scheduler/company_info/common/company_common_query_service.py +45 -0
- mns_scheduler/company_info/constant/__init__.py +1 -1
- mns_scheduler/company_info/constant/company_constant_data.py +335 -224
- mns_scheduler/company_info/de_list_stock/__init__.py +1 -1
- mns_scheduler/company_info/de_list_stock/de_list_stock_service.py +1 -1
- mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +134 -0
- mns_scheduler/company_info/sync/company_info_set_service.py +208 -0
- mns_scheduler/company_info/sync/sync_company_info_task.py +203 -0
- mns_scheduler/company_info/task/company_announce_info_task.py +77 -0
- mns_scheduler/company_info/task/company_base_info_task.py +64 -0
- mns_scheduler/company_info/task/company_business_info_task.py +177 -0
- mns_scheduler/company_info/task/company_hold_info_task.py +66 -0
- mns_scheduler/company_info/task/company_industry_info_task.py +167 -0
- mns_scheduler/company_info/task/company_total_task.py +69 -0
- mns_scheduler/concept/clean/kpl_concept_clean_api.py +1 -1
- mns_scheduler/concept/clean/ths_concept_clean_api.py +20 -4
- mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +23 -18
- mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +4 -1
- mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +7 -7
- mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py +9 -4
- mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +2 -2
- mns_scheduler/db/col_move_service.py +3 -3
- mns_scheduler/db/script/__init__.py +1 -1
- mns_scheduler/db/script/col_move_script.py +1 -1
- mns_scheduler/db/script/db_move/__init__.py +7 -0
- mns_scheduler/db/script/db_move/col_move_one_service.py +34 -0
- mns_scheduler/db/script/sync/__init__.py +1 -1
- mns_scheduler/db/script/sync/remote_data_sync_to_local.py +65 -4
- mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +80 -0
- mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +69 -0
- mns_scheduler/db/script/update/__init__.py +7 -0
- mns_scheduler/db/script/update/update_col_field.py +36 -0
- mns_scheduler/finance/__init__.py +1 -1
- mns_scheduler/finance/em/__init__.py +7 -0
- mns_scheduler/finance/{em_financial_asset_liability_sync_service_api.py → em/em_financial_asset_liability_sync_service_api.py} +2 -2
- mns_scheduler/finance/{em_financial_profit_sync_service_api.py → em/em_financial_profit_sync_service_api.py} +27 -26
- mns_scheduler/finance/{finance_common_api.py → em/finance_common_api.py} +3 -3
- mns_scheduler/finance/{sync_financial_report_service_api.py → sync_financial_report_service_task.py} +80 -27
- mns_scheduler/finance/xue_qiu/__init__.py +7 -0
- mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py +77 -0
- mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py +161 -0
- mns_scheduler/hk/__init__.py +1 -1
- mns_scheduler/hk/hk_company_info_sync_service_api.py +4 -4
- mns_scheduler/hk/hk_industry_info_sync_service_api.py +3 -5
- mns_scheduler/industry/__init__.py +7 -0
- mns_scheduler/industry/ths/__init__.py +7 -0
- mns_scheduler/industry/ths/ths_industry_index_service.py +58 -0
- mns_scheduler/industry/ths/ths_industry_sync_service.py +68 -0
- mns_scheduler/irm/__init__.py +1 -1
- mns_scheduler/irm/api/__init__.py +1 -1
- mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +8 -58
- mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +15 -26
- mns_scheduler/irm/stock_irm_cninfo_service.py +43 -31
- mns_scheduler/irm/stock_question_id_service.py +169 -0
- mns_scheduler/k_line/clean/daily/__init__.py +1 -1
- mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +52 -6
- mns_scheduler/k_line/clean/daily/daily_k_line_service.py +7 -2
- mns_scheduler/k_line/clean/k_line_info_clean_impl.py +3 -2
- mns_scheduler/k_line/clean/k_line_info_clean_task.py +42 -15
- mns_scheduler/k_line/clean/week_month/__init__.py +1 -1
- mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +124 -26
- mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +2 -2
- mns_scheduler/k_line/common/__init__.py +7 -0
- mns_scheduler/k_line/common/k_line_common_api.py +188 -0
- mns_scheduler/k_line/hot_stocks/__init__.py +1 -1
- mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +1 -1
- mns_scheduler/k_line/{sync → month_week_daily}/bfq_k_line_sync.py +14 -29
- mns_scheduler/k_line/{sync → month_week_daily}/daily_week_month_line_sync.py +11 -12
- mns_scheduler/k_line/sync_status/__init__.py +7 -0
- mns_scheduler/k_line/sync_status/k_line_sync_status_check.py +54 -0
- mns_scheduler/k_line/test/__init__.py +1 -1
- mns_scheduler/k_line/test/k_line_info_clean_his_data.py +14 -3
- mns_scheduler/k_line/year_quarter/__init__.py +7 -0
- mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +76 -0
- mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +1 -2
- mns_scheduler/kpl/selection/symbol/sync_kpl_concept_symbol_choose_reason_api.py +108 -0
- mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +5 -0
- mns_scheduler/lhb/__init__.py +1 -1
- mns_scheduler/lhb/stock_lhb_sync_service.py +1 -1
- mns_scheduler/open/__init__.py +1 -1
- mns_scheduler/open/sync_one_day_open_data_to_db_service.py +2 -3
- mns_scheduler/risk/__init__.py +1 -1
- mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +8 -2
- mns_scheduler/risk/financial/annual_report_audit_check_api.py +13 -3
- mns_scheduler/risk/financial/net_assets_check_api.py +21 -18
- mns_scheduler/risk/financial/profit_income_check_api.py +7 -2
- mns_scheduler/risk/financial_report_risk_check_api.py +1 -1
- mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py +1 -1
- mns_scheduler/risk/self/wei_pan_stock_api.py +1 -1
- mns_scheduler/risk/test/__init__.py +1 -1
- mns_scheduler/risk/test/fix_blask_list.py +4 -6
- mns_scheduler/risk/transactions/transactions_check_api.py +22 -4
- mns_scheduler/self_choose/__init__.py +1 -1
- mns_scheduler/self_choose/ths_self_choose_service.py +99 -43
- mns_scheduler/trade/auto_login/trader_auto_service.py +7 -4
- mns_scheduler/trade/auto_sell_service_api.py +4 -4
- mns_scheduler/trade/balance/__init__.py +7 -0
- mns_scheduler/trade/balance/ths_account_balance_service.py +7 -0
- mns_scheduler/trade/sync_position_api.py +39 -6
- mns_scheduler/trade/task/trader_task_service.py +38 -10
- mns_scheduler/trade/tfp/__init__.py +7 -0
- mns_scheduler/trade/tfp/stock_tfp_info_sync.py +56 -0
- mns_scheduler/zb/stock_zb_pool_sync.py +1 -16
- mns_scheduler/zt/high_chg/sync_high_chg_pool_service.py +2 -2
- mns_scheduler/zt/high_chg/sync_high_chg_real_time_quotes_service.py +1 -1
- mns_scheduler/zt/script/__init__.py +1 -1
- mns_scheduler/zt/script/fix_error_deal_day.py +41 -0
- mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +2 -2
- mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +2 -2
- mns_scheduler/zt/script/sync_now_higt_chg_zt.py +8 -7
- mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +260 -83
- mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +33 -90
- mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +27 -13
- mns_scheduler/zz_task/compensation/__init__.py +0 -0
- mns_scheduler/zz_task/compensation/compensate_task.py +161 -0
- mns_scheduler/zz_task/compensation/compensate_task_one_day.py +142 -0
- mns_scheduler/zz_task/data_sync_task.py +197 -103
- {mns_scheduler-1.1.8.4.dist-info → mns_scheduler-1.4.5.7.dist-info}/METADATA +1 -1
- mns_scheduler-1.4.5.7.dist-info/RECORD +176 -0
- {mns_scheduler-1.1.8.4.dist-info → mns_scheduler-1.4.5.7.dist-info}/WHEEL +1 -1
- mns_scheduler/2014-2015-test/2014_2015_chg_statistics.py +0 -87
- mns_scheduler/big_deal/ths_big_deal_sync.py +0 -98
- mns_scheduler/company_info/base/sync_company_base_info_api.py +0 -439
- mns_scheduler/company_info/base/sync_company_hold_info_api.py +0 -40
- mns_scheduler/company_info/remark/company_remark_info_sync.py +0 -46
- mns_scheduler/db/real_time_task_check.py +0 -84
- mns_scheduler/debt/kzz_bond_info_sync.py +0 -33
- mns_scheduler-1.1.8.4.dist-info/RECORD +0 -142
- /mns_scheduler/{2014-2015-test → auto_da_ban}/__init__.py +0 -0
- /mns_scheduler/company_info/{base → common}/__init__.py +0 -0
- /mns_scheduler/{big_deal → company_info/em_stock_info}/__init__.py +0 -0
- /mns_scheduler/company_info/{remark → sync}/__init__.py +0 -0
- /mns_scheduler/{debt → company_info/task}/__init__.py +0 -0
- /mns_scheduler/k_line/{sync → month_week_daily}/__init__.py +0 -0
- {mns_scheduler-1.1.8.4.dist-info → mns_scheduler-1.4.5.7.dist-info}/top_level.txt +0 -0
|
@@ -10,6 +10,7 @@ import mns_scheduler.kpl.selection.symbol.sync_best_choose_symbol as sync_best_c
|
|
|
10
10
|
import threading
|
|
11
11
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
12
12
|
import mns_common.api.kpl.constant.kpl_constant as kpl_constant
|
|
13
|
+
import mns_scheduler.kpl.selection.symbol.sync_kpl_concept_symbol_choose_reason_api as sync_kpl_concept_symbol_choose_reason_api
|
|
13
14
|
|
|
14
15
|
file_path = os.path.abspath(__file__)
|
|
15
16
|
end = file_path.index('mns') + 17
|
|
@@ -84,6 +85,10 @@ def sync_all_plate_info():
|
|
|
84
85
|
update_null_name()
|
|
85
86
|
logger.info("更新开盘啦空名字名称")
|
|
86
87
|
|
|
88
|
+
# 更新开盘啦入选原因
|
|
89
|
+
sync_kpl_concept_symbol_choose_reason_api.update_null_choose_reason()
|
|
90
|
+
logger.info("更新开盘啦入选原因")
|
|
91
|
+
|
|
87
92
|
|
|
88
93
|
# 更新一二级关系
|
|
89
94
|
def update_best_choose_plate_relation():
|
mns_scheduler/lhb/__init__.py
CHANGED
mns_scheduler/open/__init__.py
CHANGED
|
@@ -2,7 +2,7 @@ import sys
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') +
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
# 同步当天所有开盘数据
|
|
@@ -13,7 +13,6 @@ from mns_common.db.MongodbUtil import MongodbUtil
|
|
|
13
13
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
14
14
|
import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
|
|
15
15
|
import mns_common.component.data.data_init_api as data_init_api
|
|
16
|
-
import pandas as pd
|
|
17
16
|
import mns_common.utils.db_util as db_util
|
|
18
17
|
|
|
19
18
|
mongodb_util = MongodbUtil('27017')
|
|
@@ -68,4 +67,4 @@ def handle_init_real_time_quotes_data(real_time_quotes_now, str_now_date, number
|
|
|
68
67
|
|
|
69
68
|
|
|
70
69
|
if __name__ == '__main__':
|
|
71
|
-
sync_one_day_open_data('
|
|
70
|
+
sync_one_day_open_data('2025-03-21')
|
mns_scheduler/risk/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
2
|
import mns_common.component.self_choose.black_list_service_api as black_list_service_api
|
|
3
|
-
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
3
|
+
import mns_scheduler.finance.em.finance_common_api as finance_common_api
|
|
4
4
|
from loguru import logger
|
|
5
5
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
6
6
|
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
@@ -21,6 +21,12 @@ def un_disclosed_report_check(sync_time, now_year, period, period_time):
|
|
|
21
21
|
db_name_constant.EM_STOCK_PROFIT)
|
|
22
22
|
un_report_df = pd.concat([un_report_asset_df, un_report_profit_df])
|
|
23
23
|
if period == 4 or period == 1:
|
|
24
|
+
month = sync_time[5:7]
|
|
25
|
+
day = sync_time[8:10]
|
|
26
|
+
day = int(day)
|
|
27
|
+
month = int(month)
|
|
28
|
+
if (month < 4) or (month == 4 and day < 20):
|
|
29
|
+
return None
|
|
24
30
|
last_report_day = str(now_year) + "-05-01"
|
|
25
31
|
elif period == 2:
|
|
26
32
|
last_report_day = str(now_year) + "-07-01"
|
|
@@ -62,4 +68,4 @@ def un_disclosed_report_check(sync_time, now_year, period, period_time):
|
|
|
62
68
|
|
|
63
69
|
|
|
64
70
|
if __name__ == '__main__':
|
|
65
|
-
un_disclosed_report_check('
|
|
71
|
+
un_disclosed_report_check('2025-04-29', 2025, 4, '2024-12-31 00:00:00')
|
|
@@ -2,18 +2,21 @@ import sys
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') +
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
import mns_common.component.self_choose.black_list_service_api as black_list_service_api
|
|
9
9
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
10
10
|
from datetime import datetime
|
|
11
11
|
from mns_common.constant.black_list_classify_enum import BlackClassify
|
|
12
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
12
13
|
|
|
13
14
|
# 年报审计意见check
|
|
14
15
|
mongodb_util = MongodbUtil('27017')
|
|
15
16
|
# 审核标准意见
|
|
16
17
|
OPINION_TYPE = "标准无保留意见"
|
|
18
|
+
# 新上市不check
|
|
19
|
+
NEW_STOCK = 365
|
|
17
20
|
|
|
18
21
|
|
|
19
22
|
def annual_report_audit_check(new_report_df, period_time):
|
|
@@ -25,11 +28,18 @@ def annual_report_audit_check(new_report_df, period_time):
|
|
|
25
28
|
notice_date = list(new_report_one_df['NOTICE_DATE'])[0]
|
|
26
29
|
now_date = datetime.now()
|
|
27
30
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
query = {'symbol': symbol, 'level_code': BlackClassify.AUDIT_PROBLEM.level_code}
|
|
32
|
+
mongodb_util.remove_data(query, db_name_constant.SELF_BLACK_STOCK)
|
|
30
33
|
# 年报有问题
|
|
31
34
|
if opinion_type != OPINION_TYPE:
|
|
35
|
+
query_company = {'_id': symbol}
|
|
36
|
+
company_info = mongodb_util.find_query_data(db_name_constant.COMPANY_INFO, query_company)
|
|
37
|
+
diff_days = list(company_info['diff_days'])[0]
|
|
38
|
+
if diff_days < NEW_STOCK:
|
|
39
|
+
return
|
|
40
|
+
|
|
32
41
|
id_key = symbol + "_" + period_time + "_" + BlackClassify.AUDIT_PROBLEM.level_code
|
|
42
|
+
|
|
33
43
|
black_list_service_api.save_black_stock(id_key,
|
|
34
44
|
symbol,
|
|
35
45
|
name,
|
|
@@ -31,14 +31,17 @@ def net_assets_check(report_type, new_report_df, period_time):
|
|
|
31
31
|
name = list(new_report_one_df['SECURITY_NAME_ABBR'])[0]
|
|
32
32
|
now_date = datetime.now()
|
|
33
33
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
34
|
-
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
35
34
|
id_key = symbol + "_" + period_time + "_" + BlackClassify.FINANCIAL_PROBLEM_DEBT.level_code
|
|
36
35
|
notice_date = list(new_report_one_df['NOTICE_DATE'])[0]
|
|
37
36
|
query_company = {'_id': symbol, 'industry': {'$in': EXCLUDE_INDUSTRY}}
|
|
37
|
+
query = {'symbol': symbol, 'level_code': BlackClassify.FINANCIAL_PROBLEM_DEBT.level_code}
|
|
38
|
+
mongodb_util.remove_data(query, db_name_constant.SELF_BLACK_STOCK)
|
|
39
|
+
|
|
38
40
|
if mongodb_util.exist_data_query(db_name_constant.COMPANY_INFO, query_company):
|
|
39
41
|
return None
|
|
40
42
|
|
|
41
|
-
if liability_ratio >= MAX_LIABILITY_RATIO:
|
|
43
|
+
if liability_ratio >= MAX_LIABILITY_RATIO and net_asset < MIN_NET_ASSET:
|
|
44
|
+
|
|
42
45
|
black_list_service_api.save_black_stock(id_key,
|
|
43
46
|
symbol,
|
|
44
47
|
name,
|
|
@@ -54,19 +57,19 @@ def net_assets_check(report_type, new_report_df, period_time):
|
|
|
54
57
|
BlackClassify.FINANCIAL_PROBLEM_DEBT.up_level_name,
|
|
55
58
|
BlackClassify.FINANCIAL_PROBLEM_DEBT.level_code,
|
|
56
59
|
BlackClassify.FINANCIAL_PROBLEM_DEBT.level_name)
|
|
57
|
-
if net_asset < MIN_NET_ASSET:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
60
|
+
# if net_asset < MIN_NET_ASSET:
|
|
61
|
+
# black_list_service_api.save_black_stock(id_key,
|
|
62
|
+
# symbol,
|
|
63
|
+
# name,
|
|
64
|
+
# str_day,
|
|
65
|
+
# notice_date,
|
|
66
|
+
# '净资产低:' + "[" + "负债比:" + str(
|
|
67
|
+
# liability_ratio) + "]" + "," + "净资产:"
|
|
68
|
+
# + str(round(net_asset / common_service_fun_api.HUNDRED_MILLION,
|
|
69
|
+
# 0)) + "亿",
|
|
70
|
+
# '净资产低:' + "[" + str(liability_ratio) + "]",
|
|
71
|
+
# '',
|
|
72
|
+
# BlackClassify.FINANCIAL_PROBLEM_DEBT.up_level_code,
|
|
73
|
+
# BlackClassify.FINANCIAL_PROBLEM_DEBT.up_level_name,
|
|
74
|
+
# BlackClassify.FINANCIAL_PROBLEM_DEBT.level_code,
|
|
75
|
+
# BlackClassify.FINANCIAL_PROBLEM_DEBT.level_name)
|
|
@@ -5,9 +5,11 @@ import mns_common.constant.db_name_constant as db_name_constant
|
|
|
5
5
|
import mns_common.component.self_choose.black_list_service_api as black_list_service_api
|
|
6
6
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
7
7
|
from mns_common.constant.black_list_classify_enum import BlackClassify
|
|
8
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
8
9
|
|
|
10
|
+
mongodb_util = MongodbUtil('27017')
|
|
9
11
|
file_path = os.path.abspath(__file__)
|
|
10
|
-
end = file_path.index('mns') +
|
|
12
|
+
end = file_path.index('mns') + 17
|
|
11
13
|
project_path = file_path[0:end]
|
|
12
14
|
sys.path.append(project_path)
|
|
13
15
|
|
|
@@ -25,7 +27,6 @@ def profit_income_check(new_report_df, period_time, report_type):
|
|
|
25
27
|
name = list(new_report_one_df['SECURITY_NAME_ABBR'])[0]
|
|
26
28
|
now_date = datetime.now()
|
|
27
29
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
28
|
-
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
29
30
|
notice_date = list(new_report_one_df['NOTICE_DATE'])[0]
|
|
30
31
|
if report_type == db_name_constant.EM_STOCK_PROFIT:
|
|
31
32
|
# 利润总额 净利润 扣除非经常性损益后的净利润 三者最小为负
|
|
@@ -50,6 +51,10 @@ def profit_income_check(new_report_df, period_time, report_type):
|
|
|
50
51
|
# 最小利润收入
|
|
51
52
|
min_profit = min(total_profit, net_profit, operate_profit,
|
|
52
53
|
continued_profit, parent_profit, deduct_parent_profit)
|
|
54
|
+
|
|
55
|
+
query = {'symbol': symbol, 'level_code': BlackClassify.FINANCIAL_PROBLEM_PROFIT.level_code}
|
|
56
|
+
mongodb_util.remove_data(query, db_name_constant.SELF_BLACK_STOCK)
|
|
57
|
+
|
|
53
58
|
if min_profit < 0:
|
|
54
59
|
|
|
55
60
|
classification = common_service_fun_api.classify_symbol_one(symbol)
|
|
@@ -2,7 +2,7 @@ import sys
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') +
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
import mns_scheduler.risk.financial.net_assets_check_api as net_assets_check_api
|
|
@@ -2,23 +2,21 @@ import sys
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') +
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
|
|
9
9
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
10
|
-
|
|
11
|
-
from mns_common.db.MongodbUtil import MongodbUtil
|
|
12
|
-
|
|
13
10
|
import mns_scheduler.risk.financial_report_risk_check_api as financial_report_risk_check_api
|
|
11
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
14
12
|
|
|
15
13
|
mongodb_util = MongodbUtil('27017')
|
|
16
14
|
|
|
17
15
|
|
|
18
16
|
def fix_profit_black_list():
|
|
19
|
-
period_time = "
|
|
17
|
+
period_time = "2024-12-31 00:00:00"
|
|
20
18
|
period = 4
|
|
21
|
-
report_type_list = [db_name_constant.
|
|
19
|
+
report_type_list = [db_name_constant.EM_STOCK_ASSET_LIABILITY, db_name_constant.EM_STOCK_PROFIT]
|
|
22
20
|
for report_type in report_type_list:
|
|
23
21
|
query = {'REPORT_DATE': period_time}
|
|
24
22
|
em_stock_profit_df_list = mongodb_util.find_query_data(report_type, query)
|
|
@@ -2,10 +2,10 @@ import sys
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') +
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
|
-
import mns_common.
|
|
8
|
+
import mns_common.component.em.em_stock_info_api as em_stock_info_api
|
|
9
9
|
from datetime import datetime
|
|
10
10
|
import mns_common.component.self_choose.black_list_service_api as black_list_service_api
|
|
11
11
|
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
@@ -16,6 +16,7 @@ import mns_common.component.company.company_common_service_new_api as company_co
|
|
|
16
16
|
from mns_common.constant.black_list_classify_enum import BlackClassify
|
|
17
17
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
18
18
|
import mns_common.utils.date_handle_util as date_handle_util
|
|
19
|
+
import mns_common.component.tfp.stock_tfp_api as stock_tfp_api
|
|
19
20
|
|
|
20
21
|
mongodb_util = MongodbUtil('27017')
|
|
21
22
|
|
|
@@ -39,9 +40,21 @@ BJS_MARKET_MIN_VOLUME = 1500000
|
|
|
39
40
|
|
|
40
41
|
|
|
41
42
|
def transactions_check_task():
|
|
42
|
-
|
|
43
|
+
# 获取当前日期和时间
|
|
44
|
+
now = datetime.now()
|
|
45
|
+
|
|
46
|
+
# 格式化输出
|
|
47
|
+
now_day_str = now.strftime("%Y%m%d")
|
|
48
|
+
|
|
49
|
+
now_day_number = float(now_day_str)
|
|
50
|
+
|
|
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(19890604)
|
|
53
|
+
real_time_quotes_now = real_time_quotes_now.loc[real_time_quotes_now['list_date'] <= now_day_number]
|
|
43
54
|
real_time_quotes_now = common_service_fun_api.classify_symbol(real_time_quotes_now)
|
|
44
55
|
real_time_quotes_now = common_service_fun_api.exclude_ts_symbol(real_time_quotes_now)
|
|
56
|
+
# 排除交易金额为0的
|
|
57
|
+
real_time_quotes_now = common_service_fun_api.exclude_amount_zero_stock(real_time_quotes_now)
|
|
45
58
|
|
|
46
59
|
de_list_symbol = company_common_service_new_api.get_de_list_company()
|
|
47
60
|
|
|
@@ -100,8 +113,13 @@ def now_price_check(stock_one):
|
|
|
100
113
|
now_date = datetime.now()
|
|
101
114
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
102
115
|
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
116
|
+
|
|
117
|
+
tfp_symbol_list = stock_tfp_api.get_stock_tfp_symbol_list_by_day(str_day)
|
|
118
|
+
if stock_one.symbol in tfp_symbol_list:
|
|
119
|
+
return
|
|
120
|
+
|
|
103
121
|
key_id = stock_one.symbol + "_" + BlackClassify.CLOSE_PRICE_RISK.level_code
|
|
104
|
-
if now_price
|
|
122
|
+
if MIN_NOW_PRICE > now_price > 0:
|
|
105
123
|
black_list_service_api.save_black_stock(
|
|
106
124
|
key_id,
|
|
107
125
|
stock_one.symbol,
|
|
@@ -2,22 +2,22 @@ import sys
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') +
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
import mns_common.api.ths.self_choose.ths_self_choose_api as ths_self_choose_api
|
|
9
9
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
10
10
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
11
|
-
import mns_common.
|
|
11
|
+
import mns_common.component.cookie.cookie_info_service as cookie_info_service
|
|
12
12
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
13
13
|
from datetime import datetime
|
|
14
14
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
15
|
-
from functools import lru_cache
|
|
16
15
|
import mns_common.constant.self_choose_constant as self_choose_constant
|
|
17
16
|
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
18
17
|
|
|
19
18
|
mongodb_util = MongodbUtil('27017')
|
|
20
19
|
|
|
20
|
+
|
|
21
21
|
# 固定的选择
|
|
22
22
|
# fixed_optional_list = ['USDCNH', 'XAUUSD',
|
|
23
23
|
# '881279',
|
|
@@ -38,40 +38,48 @@ mongodb_util = MongodbUtil('27017')
|
|
|
38
38
|
# ]
|
|
39
39
|
|
|
40
40
|
# 固定的选择
|
|
41
|
-
fixed_optional_list = ['899050', '881157']
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
@lru_cache()
|
|
45
|
-
def get_ths_cookie():
|
|
46
|
-
query = {"type": "ths_cookie"}
|
|
47
|
-
stock_account_info = mongodb_util.find_query_data(db_name_constant.STOCK_ACCOUNT_INFO, query)
|
|
48
|
-
ths_cookie = list(stock_account_info['cookie'])[0]
|
|
49
|
-
return ths_cookie
|
|
50
|
-
|
|
41
|
+
# fixed_optional_list = ['899050', '881157']
|
|
51
42
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
43
|
+
#
|
|
44
|
+
# def add_fixed_optional():
|
|
45
|
+
# ths_cookie = cookie_info_service.get_ths_cookie()
|
|
46
|
+
# for symbol in fixed_optional_list:
|
|
47
|
+
# ths_self_choose_api.add_stock_to_account(symbol, ths_cookie)
|
|
56
48
|
|
|
57
|
-
|
|
58
|
-
def delete_all_self_choose_stocks():
|
|
59
|
-
ths_cookie = get_ths_cookie()
|
|
49
|
+
# 删除所有自选股票
|
|
50
|
+
def delete_all_self_choose_stocks(ths_cookie):
|
|
60
51
|
all_self_choose_stock_list = ths_self_choose_api.get_all_self_choose_stock_list(ths_cookie)
|
|
61
52
|
for stock_one in all_self_choose_stock_list.itertuples():
|
|
62
53
|
symbol = stock_one.code
|
|
63
54
|
ths_self_choose_api.del_stock_from_account(symbol, ths_cookie)
|
|
64
55
|
|
|
65
56
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
57
|
+
# 添加固定自选股票
|
|
58
|
+
def add_self_choose_symbol(ths_cookie):
|
|
59
|
+
# 固定自选
|
|
69
60
|
self_choose_symbol_df = mongodb_util.find_all_data(db_name_constant.SELF_CHOOSE_STOCK)
|
|
70
61
|
if data_frame_util.is_not_empty(self_choose_symbol_df):
|
|
71
62
|
self_choose_symbol_df = self_choose_symbol_df.sort_values(by=['str_now_date'], ascending=False)
|
|
72
63
|
for stock_one in self_choose_symbol_df.itertuples():
|
|
73
64
|
ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
|
|
74
65
|
|
|
66
|
+
|
|
67
|
+
# 添加今日选择股票
|
|
68
|
+
def add_today_choose_symbol(ths_cookie):
|
|
69
|
+
now_date = datetime.now()
|
|
70
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
71
|
+
last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
|
|
72
|
+
last_trade_day_time = last_trade_day + " 15:00:00"
|
|
73
|
+
query = {'str_now_date': {"$gte": last_trade_day_time}, "valid": True}
|
|
74
|
+
self_choose_symbol_today_df = mongodb_util.find_query_data(db_name_constant.TODAY_SELF_CHOOSE_STOCK, query)
|
|
75
|
+
if data_frame_util.is_not_empty(self_choose_symbol_today_df):
|
|
76
|
+
self_choose_symbol_today_df = self_choose_symbol_today_df.sort_values(by=['str_now_date'], ascending=True)
|
|
77
|
+
for stock_one in self_choose_symbol_today_df.itertuples():
|
|
78
|
+
ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
# 添加同花顺概念
|
|
82
|
+
def add_self_choose_concept(ths_cookie):
|
|
75
83
|
query_plate = {'self_type': {
|
|
76
84
|
"$in": [self_choose_constant.SELF_CHOOSE_THS_CONCEPT,
|
|
77
85
|
self_choose_constant.SELF_CHOOSE_THS_INDUSTRY]}}
|
|
@@ -84,47 +92,95 @@ def add_self_choose_local():
|
|
|
84
92
|
|
|
85
93
|
|
|
86
94
|
# 添加最近交易股票
|
|
87
|
-
def add_trade_stocks():
|
|
95
|
+
def add_trade_stocks(ths_cookie):
|
|
88
96
|
now_date = datetime.now()
|
|
89
97
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
90
98
|
last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
|
|
91
99
|
query = {"$and": [{"str_day": {"$gte": last_trade_day}}, {"str_day": {"$lte": str_day}}]}
|
|
100
|
+
|
|
101
|
+
position_stock_df = mongodb_util.find_query_data(db_name_constant.POSITION_STOCK, query)
|
|
102
|
+
if data_frame_util.is_not_empty(position_stock_df):
|
|
103
|
+
stock_list = set(position_stock_df['symbol'])
|
|
104
|
+
else:
|
|
105
|
+
stock_list = set([])
|
|
92
106
|
trade_stocks_df = mongodb_util.find_query_data(db_name_constant.BUY_STOCK_NAME, query)
|
|
93
|
-
ths_cookie = get_ths_cookie()
|
|
94
107
|
if data_frame_util.is_not_empty(trade_stocks_df):
|
|
95
|
-
|
|
96
|
-
|
|
108
|
+
stock_list = stock_list.union(set(trade_stocks_df['symbol']))
|
|
109
|
+
if len(stock_list) > 0:
|
|
110
|
+
for symbol in stock_list:
|
|
111
|
+
ths_self_choose_api.add_stock_to_account(symbol, ths_cookie)
|
|
97
112
|
|
|
98
113
|
|
|
99
114
|
# 添加连板到自选
|
|
100
|
-
def add_continue_boards_zt_stocks():
|
|
101
|
-
ths_cookie = get_ths_cookie()
|
|
115
|
+
def add_continue_boards_zt_stocks(ths_cookie):
|
|
102
116
|
now_date = datetime.now()
|
|
103
117
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
104
118
|
if trade_date_common_service_api.is_trade_day(str_day):
|
|
105
|
-
|
|
119
|
+
query = {'str_day': str_day}
|
|
120
|
+
stock_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query)
|
|
121
|
+
if data_frame_util.is_empty(stock_zt_pool_df):
|
|
122
|
+
str_day = trade_date_common_service_api.get_before_trade_date(str_day, 2)
|
|
123
|
+
query = {'str_day': str_day}
|
|
124
|
+
stock_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query)
|
|
106
125
|
else:
|
|
107
126
|
str_day = trade_date_common_service_api.get_last_trade_day(str_day)
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
127
|
+
query = {'str_day': str_day}
|
|
128
|
+
stock_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query)
|
|
129
|
+
stock_zt_pool_df = stock_zt_pool_df.loc[stock_zt_pool_df['connected_boards_numbers'] >= 3]
|
|
130
|
+
stock_zt_pool_df = common_service_fun_api.exclude_st_symbol(stock_zt_pool_df)
|
|
131
|
+
stock_zt_pool_df = stock_zt_pool_df.sort_values(by=['connected_boards_numbers'], ascending=False)
|
|
132
|
+
for stock_one in stock_zt_pool_df.itertuples():
|
|
113
133
|
ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
|
|
114
134
|
|
|
115
135
|
|
|
136
|
+
# 添加主线龙头
|
|
137
|
+
def add_main_line_leader(ths_cookie):
|
|
138
|
+
main_line_leader_df = mongodb_util.find_query_data('main_line_leader', {})
|
|
139
|
+
if data_frame_util.is_not_empty(main_line_leader_df):
|
|
140
|
+
main_line_leader_df = count_main_line_number(main_line_leader_df)
|
|
141
|
+
|
|
142
|
+
main_line_leader_df = main_line_leader_df.sort_values(
|
|
143
|
+
by=['main_line_number', 'main_line_leader_grade'],
|
|
144
|
+
ascending=[False, False,]
|
|
145
|
+
)
|
|
146
|
+
for stock_one in main_line_leader_df.itertuples():
|
|
147
|
+
ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
# 统计主线的数量
|
|
151
|
+
def count_main_line_number(main_line_detail_df):
|
|
152
|
+
# 统计主线的数量
|
|
153
|
+
main_line_detail_df['main_line_number'] = main_line_detail_df.groupby('main_line')['main_line'].transform(
|
|
154
|
+
'count')
|
|
155
|
+
# 相同主线数量 数量加1
|
|
156
|
+
main_line_detail_df['main_line_number'] = (
|
|
157
|
+
main_line_detail_df.groupby('main_line_number')['main_line']
|
|
158
|
+
.transform('rank', method='dense') - 1
|
|
159
|
+
) * 0.1 + main_line_detail_df['main_line_number']
|
|
160
|
+
|
|
161
|
+
return main_line_detail_df
|
|
162
|
+
|
|
163
|
+
|
|
116
164
|
# 自选股操作 删除当天自选股 增加新的连板股票 添加固定选择自选
|
|
117
165
|
def self_choose_stock_handle():
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
#
|
|
122
|
-
|
|
166
|
+
ths_cookie = cookie_info_service.get_ths_cookie()
|
|
167
|
+
|
|
168
|
+
delete_all_self_choose_stocks(ths_cookie)
|
|
169
|
+
# 固定自选板块
|
|
170
|
+
# add_fixed_optional()
|
|
171
|
+
# 添加同花顺概念
|
|
172
|
+
add_self_choose_concept(ths_cookie)
|
|
173
|
+
# 添加主线龙头
|
|
174
|
+
add_main_line_leader(ths_cookie)
|
|
123
175
|
# 连板股票
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
176
|
+
add_continue_boards_zt_stocks(ths_cookie)
|
|
177
|
+
|
|
178
|
+
# 自己买入的股票
|
|
179
|
+
add_trade_stocks(ths_cookie)
|
|
180
|
+
# 添加自选股票
|
|
181
|
+
add_self_choose_symbol(ths_cookie)
|
|
127
182
|
|
|
128
183
|
|
|
129
184
|
if __name__ == '__main__':
|
|
185
|
+
# add_continue_boards_zt_stocks()
|
|
130
186
|
self_choose_stock_handle()
|
|
@@ -2,12 +2,13 @@ import sys
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') +
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
import mns_common.component.deal.deal_service_api as deal_service_api
|
|
9
9
|
from mns_common.component.deal.terminal_enum import TerminalEnum
|
|
10
10
|
import time
|
|
11
|
+
from loguru import logger
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
# qmt 自动登录
|
|
@@ -21,10 +22,12 @@ def ths_auto_login():
|
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
def auto_login():
|
|
24
|
-
|
|
25
|
-
time.sleep(5)
|
|
25
|
+
logger.info("打开ths下单程序")
|
|
26
26
|
ths_auto_login()
|
|
27
|
+
time.sleep(5)
|
|
28
|
+
logger.info("打开qmt下单程序")
|
|
29
|
+
qmt_auto_login()
|
|
27
30
|
|
|
28
31
|
|
|
29
32
|
if __name__ == '__main__':
|
|
30
|
-
|
|
33
|
+
qmt_auto_login()
|
|
@@ -2,7 +2,7 @@ import os
|
|
|
2
2
|
import sys
|
|
3
3
|
|
|
4
4
|
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') +
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
|
|
@@ -109,10 +109,10 @@ def update_position_status(symbol, sell_entrust_no, str_day):
|
|
|
109
109
|
mongodb_util.update_many(update_query, new_values, db_name_constant.POSITION_STOCK)
|
|
110
110
|
|
|
111
111
|
|
|
112
|
-
import mns_common.
|
|
112
|
+
import mns_common.component.em.em_stock_info_api as em_stock_info_api
|
|
113
113
|
|
|
114
114
|
if __name__ == '__main__':
|
|
115
115
|
sell_price_01 = trade_price_service_api.get_trade_price('002336',PriceEnum.SEll_PRICE_LIMIT.price_code)
|
|
116
116
|
while True:
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
real_time_quotes_now = em_stock_info_api.get_a_stock_info()
|
|
118
|
+
auto_sell_stock(real_time_quotes_now)
|