mns-scheduler 1.0.8.7__py3-none-any.whl → 1.4.3.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.
- mns_scheduler/__init__.py +1 -3
- mns_scheduler/company_info/announce/company_announce_sync_service.py +65 -0
- mns_scheduler/company_info/{company_info_sync_api.py → base/sync_company_base_info_api.py} +239 -227
- mns_scheduler/company_info/base/sync_company_hold_info_api.py +37 -0
- mns_scheduler/company_info/base/sync_company_product_area_industry.py +161 -0
- mns_scheduler/company_info/clean/company_info_clean_api.py +133 -0
- mns_scheduler/company_info/constant/company_constant_data.py +497 -0
- mns_scheduler/company_info/{de_list_stock_service.py → de_list_stock/de_list_stock_service.py} +1 -1
- mns_scheduler/company_info/em_stock_info/__init__.py +7 -0
- mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +80 -0
- mns_scheduler/company_info/remark/__init__.py +7 -0
- mns_scheduler/company_info/remark/company_remark_info_sync.py +46 -0
- mns_scheduler/concept/clean/kpl_concept_clean_api.py +1 -1
- mns_scheduler/concept/clean/ths_concept_clean_api.py +74 -51
- mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +112 -56
- mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +6 -6
- mns_scheduler/concept/ths/detaill/__init__.py +0 -0
- mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +226 -0
- mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py +169 -0
- mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py +11 -23
- mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +19 -15
- mns_scheduler/db/col_move_service.py +10 -7
- mns_scheduler/db/db_status.py +1 -1
- mns_scheduler/db/script/__init__.py +7 -0
- mns_scheduler/db/script/col_move_script.py +45 -0
- 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 +7 -0
- mns_scheduler/db/script/sync/local_mongo_util.py +231 -0
- mns_scheduler/db/script/sync/remote_data_sync_to_local.py +105 -0
- mns_scheduler/db/script/sync/remote_mongo_util.py +306 -0
- 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_financial_asset_liability_sync_service_api.py → em/em_financial_asset_liability_sync_service_api.py} +3 -3
- mns_scheduler/finance/{em_financial_profit_sync_service_api.py → em/em_financial_profit_sync_service_api.py} +30 -25
- mns_scheduler/finance/{finance_common_api.py → em/finance_common_api.py} +4 -4
- mns_scheduler/finance/sync_financial_report_service_task.py +202 -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 +49 -5
- mns_scheduler/hk/hk_industry_info_sync_service_api.py +68 -0
- 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 +1 -1
- mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +1 -1
- mns_scheduler/irm/stock_irm_cninfo_service.py +15 -13
- mns_scheduler/k_line/clean/daily/__init__.py +1 -1
- mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +57 -7
- mns_scheduler/k_line/clean/daily/daily_k_line_service.py +16 -3
- 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 -31
- 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 +125 -27
- mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +72 -17
- 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/month_week_daily/bfq_k_line_sync.py +77 -0
- mns_scheduler/k_line/{sync → month_week_daily}/daily_week_month_line_sync.py +14 -14
- 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 +7 -0
- mns_scheduler/k_line/test/k_line_info_clean_his_data.py +41 -0
- 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 +4 -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 +12 -7
- 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 +6 -22
- mns_scheduler/risk/__init__.py +1 -1
- mns_scheduler/risk/compliance/__init__.py +0 -0
- mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +71 -0
- mns_scheduler/risk/financial/__init__.py +0 -0
- mns_scheduler/risk/financial/annual_report_audit_check_api.py +54 -0
- mns_scheduler/risk/financial/net_assets_check_api.py +75 -0
- mns_scheduler/risk/financial/profit_income_check_api.py +80 -0
- mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py +1 -0
- mns_scheduler/risk/financial_report_risk_check_api.py +42 -0
- mns_scheduler/risk/major_violations/__init__.py +0 -0
- mns_scheduler/risk/{register_and_investigate_stock_sync_api.py → major_violations/register_and_investigate_stock_sync_api.py} +17 -8
- mns_scheduler/risk/self/__init__.py +0 -0
- mns_scheduler/risk/{wei_pan_stock_api.py → self/wei_pan_stock_api.py} +10 -4
- mns_scheduler/risk/test/__init__.py +7 -0
- mns_scheduler/{finance → risk}/test/fix_blask_list.py +6 -10
- mns_scheduler/risk/transactions/__init__.py +0 -0
- mns_scheduler/risk/transactions/transactions_check_api.py +183 -0
- mns_scheduler/self_choose/__init__.py +7 -0
- mns_scheduler/self_choose/ths_self_choose_service.py +158 -0
- mns_scheduler/trade/auto_ipo_buy_api.py +2 -2
- mns_scheduler/trade/auto_login/__init__.py +7 -0
- mns_scheduler/trade/auto_login/trader_auto_service.py +32 -0
- mns_scheduler/trade/auto_sell_service_api.py +10 -8
- 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 +41 -8
- mns_scheduler/trade/task/__init__.py +7 -0
- mns_scheduler/trade/task/trader_task_service.py +65 -0
- 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 -15
- mns_scheduler/zt/high_chg/sync_high_chg_pool_service.py +2 -3
- mns_scheduler/zt/high_chg/sync_high_chg_real_time_quotes_service.py +12 -8
- mns_scheduler/zt/open_data/kcx_high_chg_open_data_sync.py +10 -25
- 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 -11
- mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +2 -2
- mns_scheduler/zt/script/sync_now_higt_chg_zt.py +43 -0
- mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +413 -0
- mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +193 -0
- mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +58 -0
- 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 +271 -121
- {mns_scheduler-1.0.8.7.dist-info → mns_scheduler-1.4.3.2.dist-info}/METADATA +1 -1
- mns_scheduler-1.4.3.2.dist-info/RECORD +169 -0
- {mns_scheduler-1.0.8.7.dist-info → mns_scheduler-1.4.3.2.dist-info}/WHEEL +1 -1
- mns_scheduler/backup/app/ths_new_concept_sync_app.py +0 -122
- mns_scheduler/backup/em/em_new_concept_his_sync.py +0 -99
- mns_scheduler/backup/em/em_new_concept_sync_common_api.py +0 -139
- mns_scheduler/backup/em/em_new_concept_sync_web.py +0 -55
- mns_scheduler/backup/wen_cai/wen_cai_concept_sync.py +0 -51
- mns_scheduler/big_deal/ths_big_deal_sync.py +0 -98
- mns_scheduler/company_info/company_constant_data.py +0 -322
- mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_by_ak_api.py +0 -103
- mns_scheduler/concept/ths/sync_new_index/sync_ths_new_concept_by_web_api.py +0 -89
- mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py +0 -202
- mns_scheduler/finance/sync_financial_report_service_api.py +0 -113
- mns_scheduler/real_time/realtime_quotes_now_create_db_index.py +0 -27
- mns_scheduler/real_time/realtime_quotes_now_sync.py +0 -232
- mns_scheduler/risk/stock_equity_mortgage_sync_api.py +0 -32
- mns_scheduler/zt/zt_pool/zt_pool_sync_api.py +0 -151
- mns_scheduler/zz_task/sync_realtime_quotes_task.py +0 -28
- mns_scheduler-1.0.8.7.dist-info/RECORD +0 -112
- /mns_scheduler/{backup/app → company_info/announce}/__init__.py +0 -0
- /mns_scheduler/{backup/em → company_info/base}/__init__.py +0 -0
- /mns_scheduler/{backup/wen_cai → company_info/clean}/__init__.py +0 -0
- /mns_scheduler/{big_deal → company_info/constant}/__init__.py +0 -0
- /mns_scheduler/{real_time → company_info/de_list_stock}/__init__.py +0 -0
- /mns_scheduler/{backup → finance/em}/__init__.py +0 -0
- /mns_scheduler/finance/{test → xue_qiu}/__init__.py +0 -0
- /mns_scheduler/k_line/{sync → month_week_daily}/__init__.py +0 -0
- {mns_scheduler-1.0.8.7.dist-info → mns_scheduler-1.4.3.2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import mns_scheduler.risk.financial.net_assets_check_api as net_assets_check_api
|
|
9
|
+
import mns_scheduler.risk.financial.annual_report_audit_check_api as annual_report_audit_check_api
|
|
10
|
+
import mns_scheduler.risk.financial.profit_income_check_api as profit_income_check_api
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# 1.无保留意见/标准报告:报告没问题。(没有发现造假,但也不能保证为真)
|
|
14
|
+
#
|
|
15
|
+
# 2.带强调事项段的无保留意见:报告没问题,但是有亏损获对其可持续经营有重大疑虑(可能造假,至少是在粉饰报表)
|
|
16
|
+
#
|
|
17
|
+
# 3.保留意见报告:有问题,财务造假
|
|
18
|
+
#
|
|
19
|
+
# 4.否定意见报告:有很大问题
|
|
20
|
+
#
|
|
21
|
+
# 5.无法表示意见报告:不让查
|
|
22
|
+
#
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
#### 退市新规 ####
|
|
26
|
+
# 1 股价类:连续20个交易日估价低于1元
|
|
27
|
+
# 2 市值类: 主板小于5亿、创业板3亿
|
|
28
|
+
# 3 财务类: (1) 利润总额 净利润 扣非净利润三者最小值为负 且营业收入小于3亿 创业板营业收入小于1元
|
|
29
|
+
# (2) 资不抵债
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# 财报审核
|
|
33
|
+
def financial_report_check(new_report_df, period_time, period, report_type):
|
|
34
|
+
# 年报审核
|
|
35
|
+
if period == 4:
|
|
36
|
+
# 年报审计意见
|
|
37
|
+
annual_report_audit_check_api.annual_report_audit_check(new_report_df, period_time)
|
|
38
|
+
# 年报收入利润check
|
|
39
|
+
profit_income_check_api.profit_income_check(new_report_df, period_time, report_type)
|
|
40
|
+
|
|
41
|
+
# 负债过高
|
|
42
|
+
net_assets_check_api.net_assets_check(report_type, new_report_df, period_time)
|
|
File without changes
|
|
@@ -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 requests
|
|
@@ -14,8 +14,10 @@ from loguru import logger
|
|
|
14
14
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
15
15
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
16
16
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
17
|
+
from mns_common.constant.black_list_classify_enum import BlackClassify
|
|
17
18
|
|
|
18
19
|
mongodb_util = MongodbUtil('27017')
|
|
20
|
+
import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
|
|
19
21
|
|
|
20
22
|
|
|
21
23
|
# 立案调查股票
|
|
@@ -61,8 +63,8 @@ def sync_all_investigate_stocks(page_size, search_key, begin_day, end_day):
|
|
|
61
63
|
|
|
62
64
|
|
|
63
65
|
# 立案调查的股票
|
|
64
|
-
def
|
|
65
|
-
before_days =
|
|
66
|
+
def sync_register_and_investigate_stocks():
|
|
67
|
+
before_days = 60
|
|
66
68
|
const_num = 30
|
|
67
69
|
init_date = datetime.now()
|
|
68
70
|
str_day = init_date.strftime('%Y-%m-%d')
|
|
@@ -77,9 +79,12 @@ def sync_new_high_risk_stocks():
|
|
|
77
79
|
if data_frame_util.is_empty(new_high_risk_stocks_df):
|
|
78
80
|
return None
|
|
79
81
|
new_high_risk_stocks_df = new_high_risk_stocks_df.sort_values(by=['announcementTime'], ascending=False)
|
|
82
|
+
de_list_company_symbols = company_common_service_new_api.get_de_list_company()
|
|
80
83
|
for high_risk_stocks_one in new_high_risk_stocks_df.itertuples():
|
|
81
84
|
try:
|
|
82
85
|
symbol = high_risk_stocks_one.secCode
|
|
86
|
+
if symbol in de_list_company_symbols:
|
|
87
|
+
continue
|
|
83
88
|
announcement_id = high_risk_stocks_one.announcementId
|
|
84
89
|
|
|
85
90
|
key_id = symbol + "_" + str(announcement_id)
|
|
@@ -109,13 +114,17 @@ def sync_new_high_risk_stocks():
|
|
|
109
114
|
high_risk_stocks_one.announcementTitle,
|
|
110
115
|
high_risk_stocks_one.announcementTitle,
|
|
111
116
|
announce_url,
|
|
112
|
-
|
|
117
|
+
BlackClassify.MAJOR_VIOLATIONS.up_level_code,
|
|
118
|
+
BlackClassify.MAJOR_VIOLATIONS.up_level_name,
|
|
119
|
+
BlackClassify.REGISTER_INVESTIGATE.level_code,
|
|
120
|
+
BlackClassify.REGISTER_INVESTIGATE.level_name,
|
|
121
|
+
)
|
|
113
122
|
except Exception as e:
|
|
114
123
|
logger.error("保存风险警示股票异常:{},{}", symbol, e)
|
|
115
124
|
|
|
116
125
|
|
|
117
126
|
if __name__ == '__main__':
|
|
118
|
-
|
|
119
|
-
result_df = sync_all_investigate_stocks(30, '立案', '2023-01-01', '2024-
|
|
120
|
-
result_df = result_df.sort_values(by=['announcementTime'], ascending=False)
|
|
121
|
-
print(result_df)
|
|
127
|
+
sync_register_and_investigate_stocks()
|
|
128
|
+
# result_df = sync_all_investigate_stocks(30, '立案', '2023-01-01', '2024-06-15')
|
|
129
|
+
# result_df = result_df.sort_values(by=['announcementTime'], ascending=False)
|
|
130
|
+
# print(result_df)
|
|
File without changes
|
|
@@ -2,19 +2,20 @@ 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
|
-
import
|
|
9
|
+
import mns_scheduler.concept.ths.detaill.ths_concept_detail_api as ths_concept_detail_api
|
|
10
10
|
import mns_common.component.self_choose.black_list_service_api as black_list_service_api
|
|
11
11
|
from datetime import datetime
|
|
12
12
|
from loguru import logger
|
|
13
13
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
14
|
+
from mns_common.constant.black_list_classify_enum import BlackClassify
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
def add_concept_to_lack_list(concept_code, reason):
|
|
17
|
-
new_concept_symbol_list =
|
|
18
|
+
new_concept_symbol_list = ths_concept_detail_api.get_ths_concept_detail(concept_code, None)
|
|
18
19
|
if data_frame_util.is_empty(new_concept_symbol_list):
|
|
19
20
|
return None
|
|
20
21
|
|
|
@@ -34,7 +35,12 @@ def add_concept_to_lack_list(concept_code, reason):
|
|
|
34
35
|
reason,
|
|
35
36
|
reason,
|
|
36
37
|
'',
|
|
37
|
-
|
|
38
|
+
BlackClassify.SELF_SHIELD_OTHER.up_level_code,
|
|
39
|
+
BlackClassify.SELF_SHIELD_OTHER.up_level_name,
|
|
40
|
+
BlackClassify.SELF_SHIELD_OTHER.level_code,
|
|
41
|
+
BlackClassify.SELF_SHIELD_OTHER.level_name,
|
|
42
|
+
|
|
43
|
+
)
|
|
38
44
|
except BaseException as e:
|
|
39
45
|
logger.error("概念拉黑异常:{}", e)
|
|
40
46
|
|
|
@@ -2,25 +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
|
-
|
|
10
9
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
11
|
-
|
|
10
|
+
import mns_scheduler.risk.financial_report_risk_check_api as financial_report_risk_check_api
|
|
12
11
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
13
12
|
|
|
14
|
-
import mns_scheduler.finance.financial_high_risk_stock_clean_service_api as financial_high_risk_stock_clean_service_api
|
|
15
|
-
|
|
16
|
-
|
|
17
13
|
mongodb_util = MongodbUtil('27017')
|
|
18
14
|
|
|
19
15
|
|
|
20
16
|
def fix_profit_black_list():
|
|
21
|
-
period_time = "
|
|
17
|
+
period_time = "2024-12-31 00:00:00"
|
|
22
18
|
period = 4
|
|
23
|
-
report_type_list = [db_name_constant.
|
|
19
|
+
report_type_list = [db_name_constant.EM_STOCK_ASSET_LIABILITY, db_name_constant.EM_STOCK_PROFIT]
|
|
24
20
|
for report_type in report_type_list:
|
|
25
21
|
query = {'REPORT_DATE': period_time}
|
|
26
22
|
em_stock_profit_df_list = mongodb_util.find_query_data(report_type, query)
|
|
@@ -28,8 +24,8 @@ def fix_profit_black_list():
|
|
|
28
24
|
em_stock_one_df = em_stock_profit_df_list.loc[
|
|
29
25
|
em_stock_profit_df_list['SECURITY_CODE'] == em_stock_one.SECURITY_CODE]
|
|
30
26
|
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
financial_report_risk_check_api.financial_report_check(em_stock_one_df, period_time, period,
|
|
28
|
+
report_type)
|
|
33
29
|
|
|
34
30
|
|
|
35
31
|
if __name__ == '__main__':
|
|
File without changes
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import mns_common.component.em.em_stock_info_api as em_stock_info_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
|
+
import mns_common.component.tfp.stock_tfp_api as stock_tfp_api
|
|
20
|
+
|
|
21
|
+
mongodb_util = MongodbUtil('27017')
|
|
22
|
+
|
|
23
|
+
# 主板 市值最小值 6亿 20个交易日低于5亿退市
|
|
24
|
+
MAIN_MARKET_MIN_MV = 600000000
|
|
25
|
+
|
|
26
|
+
# 创业 科创 北交所 市值最小值 4亿 20个交易日低于3亿退市
|
|
27
|
+
SUB_MARKET_MIN_MV = 400000000
|
|
28
|
+
|
|
29
|
+
# 最小面值 20个交易日低于1元退市
|
|
30
|
+
MIN_NOW_PRICE = 1.5
|
|
31
|
+
|
|
32
|
+
# 主板 120个交易日 参考600万 成交量低于500万股
|
|
33
|
+
MAIN_MARKET_MIN_VOLUME = 6000000
|
|
34
|
+
|
|
35
|
+
# 科创 创业 120个交易日 参考300万 成交量低于200万股
|
|
36
|
+
SUB_MARKET_MIN_VOLUME = 3000000
|
|
37
|
+
|
|
38
|
+
# 北交所 120个交易日 参考150万 成交量低于100万股
|
|
39
|
+
BJS_MARKET_MIN_VOLUME = 1500000
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def transactions_check_task():
|
|
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]
|
|
54
|
+
real_time_quotes_now = common_service_fun_api.classify_symbol(real_time_quotes_now)
|
|
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)
|
|
58
|
+
|
|
59
|
+
de_list_symbol = company_common_service_new_api.get_de_list_company()
|
|
60
|
+
|
|
61
|
+
real_time_quotes_now = real_time_quotes_now.loc[~(real_time_quotes_now['symbol'].isin(de_list_symbol))]
|
|
62
|
+
|
|
63
|
+
query = {"up_level_code": BlackClassify.TRANSACTIONS.level_code}
|
|
64
|
+
tag = mongodb_util.remove_data(query, db_name_constant.SELF_BLACK_STOCK)
|
|
65
|
+
success = tag.acknowledged
|
|
66
|
+
if success:
|
|
67
|
+
|
|
68
|
+
for stock_one in real_time_quotes_now.itertuples():
|
|
69
|
+
try:
|
|
70
|
+
total_mv_check(stock_one)
|
|
71
|
+
now_price_check(stock_one)
|
|
72
|
+
volume_check(stock_one)
|
|
73
|
+
except BaseException as e:
|
|
74
|
+
logger.error("交易风险校验异常:{},{}", e, stock_one.symbol)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
# 总市值check
|
|
78
|
+
def total_mv_check(stock_one):
|
|
79
|
+
classification = stock_one.classification
|
|
80
|
+
total_mv = stock_one.total_mv
|
|
81
|
+
now_date = datetime.now()
|
|
82
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
83
|
+
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
84
|
+
key_id = stock_one.symbol + "_" + BlackClassify.MV_RISK.level_code
|
|
85
|
+
tag = False
|
|
86
|
+
if classification in ['S', 'H'] and total_mv < MAIN_MARKET_MIN_MV:
|
|
87
|
+
tag = True
|
|
88
|
+
elif classification in ['K', 'C', "X"] and total_mv < SUB_MARKET_MIN_MV:
|
|
89
|
+
tag = True
|
|
90
|
+
|
|
91
|
+
if tag:
|
|
92
|
+
black_list_service_api.save_black_stock(
|
|
93
|
+
key_id,
|
|
94
|
+
stock_one.symbol,
|
|
95
|
+
stock_one.name,
|
|
96
|
+
str_day,
|
|
97
|
+
str_now_date,
|
|
98
|
+
BlackClassify.MV_RISK.level_name + ":" + str(
|
|
99
|
+
round(total_mv / common_service_fun_api.HUNDRED_MILLION, 2)) + "亿",
|
|
100
|
+
BlackClassify.MV_RISK.level_name + ":" + str(
|
|
101
|
+
round(total_mv / common_service_fun_api.HUNDRED_MILLION, 2)) + "亿",
|
|
102
|
+
"",
|
|
103
|
+
BlackClassify.MV_RISK.up_level_code,
|
|
104
|
+
BlackClassify.MV_RISK.up_level_name,
|
|
105
|
+
BlackClassify.MV_RISK.level_code,
|
|
106
|
+
BlackClassify.MV_RISK.level_name,
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# 当前面值check
|
|
111
|
+
def now_price_check(stock_one):
|
|
112
|
+
now_price = stock_one.now_price
|
|
113
|
+
now_date = datetime.now()
|
|
114
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
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
|
+
|
|
121
|
+
key_id = stock_one.symbol + "_" + BlackClassify.CLOSE_PRICE_RISK.level_code
|
|
122
|
+
if MIN_NOW_PRICE > now_price > 0:
|
|
123
|
+
black_list_service_api.save_black_stock(
|
|
124
|
+
key_id,
|
|
125
|
+
stock_one.symbol,
|
|
126
|
+
stock_one.name,
|
|
127
|
+
str_day,
|
|
128
|
+
str_now_date,
|
|
129
|
+
BlackClassify.CLOSE_PRICE_RISK.level_name + ":当前价格" + str(now_price),
|
|
130
|
+
BlackClassify.CLOSE_PRICE_RISK.level_name + ":当前价格" + str(now_price),
|
|
131
|
+
"",
|
|
132
|
+
BlackClassify.CLOSE_PRICE_RISK.up_level_code,
|
|
133
|
+
BlackClassify.CLOSE_PRICE_RISK.up_level_name,
|
|
134
|
+
BlackClassify.CLOSE_PRICE_RISK.level_code,
|
|
135
|
+
BlackClassify.CLOSE_PRICE_RISK.level_name,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
#
|
|
140
|
+
def volume_check(stock_one):
|
|
141
|
+
now_date = datetime.now()
|
|
142
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
143
|
+
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
144
|
+
trade_date_120 = trade_date_common_service_api.get_before_trade_date(str_day, 120)
|
|
145
|
+
query = {'date': {"$gte": date_handle_util.no_slash_date(trade_date_120)}, 'symbol': stock_one.symbol}
|
|
146
|
+
stock_qfq_daily_df = mongodb_util.find_query_data(db_name_constant.STOCK_QFQ_DAILY, query)
|
|
147
|
+
if stock_qfq_daily_df.shape[0] < 120:
|
|
148
|
+
return
|
|
149
|
+
# volume 单位是100股
|
|
150
|
+
sum_volume = sum(stock_qfq_daily_df['volume']) * 100
|
|
151
|
+
key_id = stock_one.symbol + "_" + BlackClassify.AMOUNT_RISK.level_code
|
|
152
|
+
tag = False
|
|
153
|
+
classification = stock_one.classification
|
|
154
|
+
if classification in ['S', 'H'] and sum_volume < MAIN_MARKET_MIN_VOLUME:
|
|
155
|
+
tag = True
|
|
156
|
+
|
|
157
|
+
elif classification in ['K', 'C'] and sum_volume < SUB_MARKET_MIN_VOLUME:
|
|
158
|
+
tag = True
|
|
159
|
+
|
|
160
|
+
elif classification in ['X'] and sum_volume < BJS_MARKET_MIN_VOLUME:
|
|
161
|
+
tag = True
|
|
162
|
+
|
|
163
|
+
if tag:
|
|
164
|
+
black_list_service_api.save_black_stock(
|
|
165
|
+
key_id,
|
|
166
|
+
stock_one.symbol,
|
|
167
|
+
stock_one.name,
|
|
168
|
+
str_day,
|
|
169
|
+
str_now_date,
|
|
170
|
+
BlackClassify.AMOUNT_RISK.level_name + ":120个交易日成交量:" + str(
|
|
171
|
+
round(sum_volume / common_service_fun_api.TEN_THOUSAND), 0) + "万股",
|
|
172
|
+
BlackClassify.AMOUNT_RISK.level_name + ":120个交易日成交量:" + str(
|
|
173
|
+
round(sum_volume / common_service_fun_api.TEN_THOUSAND), 0) + "万股",
|
|
174
|
+
"",
|
|
175
|
+
BlackClassify.AMOUNT_RISK.up_level_code,
|
|
176
|
+
BlackClassify.AMOUNT_RISK.up_level_name,
|
|
177
|
+
BlackClassify.AMOUNT_RISK.level_code,
|
|
178
|
+
BlackClassify.AMOUNT_RISK.level_name,
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
if __name__ == '__main__':
|
|
183
|
+
transactions_check_task()
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import mns_common.api.ths.self_choose.ths_self_choose_api as ths_self_choose_api
|
|
9
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
10
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
11
|
+
import mns_common.component.cookie.cookie_info_service as cookie_info_service
|
|
12
|
+
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
13
|
+
from datetime import datetime
|
|
14
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
15
|
+
import mns_common.constant.self_choose_constant as self_choose_constant
|
|
16
|
+
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
17
|
+
|
|
18
|
+
mongodb_util = MongodbUtil('27017')
|
|
19
|
+
|
|
20
|
+
# 固定的选择
|
|
21
|
+
# fixed_optional_list = ['USDCNH', 'XAUUSD',
|
|
22
|
+
# '881279',
|
|
23
|
+
# '886054', '881153', '881157', '881155',
|
|
24
|
+
# '885736', '881124', '886078',
|
|
25
|
+
# '881145', '886073', '881160', '885730',
|
|
26
|
+
# '886076', '883418', '881169', '885530',
|
|
27
|
+
# '510300', '512100',
|
|
28
|
+
# 'CN0Y',
|
|
29
|
+
# '1B0888',
|
|
30
|
+
# '1A0001',
|
|
31
|
+
# '399001',
|
|
32
|
+
# '399006',
|
|
33
|
+
# '1B0688',
|
|
34
|
+
# '899050',
|
|
35
|
+
# 'HSI',
|
|
36
|
+
# 'HS2083',
|
|
37
|
+
# ]
|
|
38
|
+
|
|
39
|
+
# 固定的选择
|
|
40
|
+
fixed_optional_list = ['899050', '881157']
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def add_fixed_optional():
|
|
44
|
+
ths_cookie = cookie_info_service.get_ths_cookie()
|
|
45
|
+
for symbol in fixed_optional_list:
|
|
46
|
+
ths_self_choose_api.add_stock_to_account(symbol, ths_cookie)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def delete_all_self_choose_stocks():
|
|
50
|
+
ths_cookie = cookie_info_service.get_ths_cookie()
|
|
51
|
+
all_self_choose_stock_list = ths_self_choose_api.get_all_self_choose_stock_list(ths_cookie)
|
|
52
|
+
for stock_one in all_self_choose_stock_list.itertuples():
|
|
53
|
+
symbol = stock_one.code
|
|
54
|
+
ths_self_choose_api.del_stock_from_account(symbol, ths_cookie)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# 添加固定自选股票
|
|
58
|
+
def add_self_choose_symbol():
|
|
59
|
+
ths_cookie = cookie_info_service.get_ths_cookie()
|
|
60
|
+
# 固定自选
|
|
61
|
+
self_choose_symbol_df = mongodb_util.find_all_data(db_name_constant.SELF_CHOOSE_STOCK)
|
|
62
|
+
if data_frame_util.is_not_empty(self_choose_symbol_df):
|
|
63
|
+
self_choose_symbol_df = self_choose_symbol_df.sort_values(by=['str_now_date'], ascending=False)
|
|
64
|
+
for stock_one in self_choose_symbol_df.itertuples():
|
|
65
|
+
ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# 添加今日选择股票
|
|
69
|
+
def add_today_choose_symbol():
|
|
70
|
+
ths_cookie = cookie_info_service.get_ths_cookie()
|
|
71
|
+
now_date = datetime.now()
|
|
72
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
73
|
+
last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
|
|
74
|
+
last_trade_day_time = last_trade_day + " 15:00:00"
|
|
75
|
+
query = {'str_now_date': {"$gte": last_trade_day_time}, "valid": True}
|
|
76
|
+
self_choose_symbol_today_df = mongodb_util.find_query_data(db_name_constant.TODAY_SELF_CHOOSE_STOCK, query)
|
|
77
|
+
if data_frame_util.is_not_empty(self_choose_symbol_today_df):
|
|
78
|
+
self_choose_symbol_today_df = self_choose_symbol_today_df.sort_values(by=['str_now_date'], ascending=True)
|
|
79
|
+
for stock_one in self_choose_symbol_today_df.itertuples():
|
|
80
|
+
ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# 添加同花顺概念
|
|
84
|
+
def add_self_choose_concept():
|
|
85
|
+
ths_cookie = cookie_info_service.get_ths_cookie()
|
|
86
|
+
query_plate = {'self_type': {
|
|
87
|
+
"$in": [self_choose_constant.SELF_CHOOSE_THS_CONCEPT,
|
|
88
|
+
self_choose_constant.SELF_CHOOSE_THS_INDUSTRY]}}
|
|
89
|
+
self_choose_plate_df = mongodb_util.find_query_data(db_name_constant.SELF_CHOOSE_PLATE, query_plate)
|
|
90
|
+
# 自选同花顺概念
|
|
91
|
+
if data_frame_util.is_not_empty(self_choose_plate_df):
|
|
92
|
+
self_choose_plate_df = self_choose_plate_df.sort_values(by=['str_now_date'], ascending=False)
|
|
93
|
+
for stock_one in self_choose_plate_df.itertuples():
|
|
94
|
+
ths_self_choose_api.add_stock_to_account(str(stock_one.self_code), ths_cookie)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
# 添加最近交易股票
|
|
98
|
+
def add_trade_stocks():
|
|
99
|
+
now_date = datetime.now()
|
|
100
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
101
|
+
last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
|
|
102
|
+
query = {"$and": [{"str_day": {"$gte": last_trade_day}}, {"str_day": {"$lte": str_day}}]}
|
|
103
|
+
|
|
104
|
+
position_stock_df = mongodb_util.find_query_data(db_name_constant.POSITION_STOCK, query)
|
|
105
|
+
if data_frame_util.is_not_empty(position_stock_df):
|
|
106
|
+
stock_list = set(position_stock_df['symbol'])
|
|
107
|
+
else:
|
|
108
|
+
stock_list = set([])
|
|
109
|
+
trade_stocks_df = mongodb_util.find_query_data(db_name_constant.BUY_STOCK_NAME, query)
|
|
110
|
+
if data_frame_util.is_not_empty(trade_stocks_df):
|
|
111
|
+
stock_list = stock_list.union(set(trade_stocks_df['symbol']))
|
|
112
|
+
ths_cookie = cookie_info_service.get_ths_cookie()
|
|
113
|
+
if len(stock_list) > 0:
|
|
114
|
+
for symbol in stock_list:
|
|
115
|
+
ths_self_choose_api.add_stock_to_account(symbol, ths_cookie)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
# 添加连板到自选
|
|
119
|
+
def add_continue_boards_zt_stocks():
|
|
120
|
+
ths_cookie = cookie_info_service.get_ths_cookie()
|
|
121
|
+
now_date = datetime.now()
|
|
122
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
123
|
+
if trade_date_common_service_api.is_trade_day(str_day):
|
|
124
|
+
query = {'str_day': str_day}
|
|
125
|
+
stock_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query)
|
|
126
|
+
if data_frame_util.is_empty(stock_zt_pool_df):
|
|
127
|
+
str_day = trade_date_common_service_api.get_before_trade_date(str_day, 2)
|
|
128
|
+
query = {'str_day': str_day}
|
|
129
|
+
stock_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query)
|
|
130
|
+
else:
|
|
131
|
+
str_day = trade_date_common_service_api.get_last_trade_day(str_day)
|
|
132
|
+
query = {'str_day': str_day}
|
|
133
|
+
stock_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query)
|
|
134
|
+
stock_zt_pool_df = stock_zt_pool_df.loc[stock_zt_pool_df['connected_boards_numbers'] >= 3]
|
|
135
|
+
stock_zt_pool_df = common_service_fun_api.exclude_st_symbol(stock_zt_pool_df)
|
|
136
|
+
stock_zt_pool_df = stock_zt_pool_df.sort_values(by=['connected_boards_numbers'], ascending=False)
|
|
137
|
+
for stock_one in stock_zt_pool_df.itertuples():
|
|
138
|
+
ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
# 自选股操作 删除当天自选股 增加新的连板股票 添加固定选择自选
|
|
142
|
+
def self_choose_stock_handle():
|
|
143
|
+
delete_all_self_choose_stocks()
|
|
144
|
+
# 固定自选板块
|
|
145
|
+
add_fixed_optional()
|
|
146
|
+
# 添加同花顺概念
|
|
147
|
+
add_self_choose_concept()
|
|
148
|
+
# 连板股票
|
|
149
|
+
add_continue_boards_zt_stocks()
|
|
150
|
+
# 自己买入的股票
|
|
151
|
+
add_trade_stocks()
|
|
152
|
+
# 添加自选股票
|
|
153
|
+
add_self_choose_symbol()
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
if __name__ == '__main__':
|
|
157
|
+
# add_continue_boards_zt_stocks()
|
|
158
|
+
self_choose_stock_handle()
|
|
@@ -6,12 +6,12 @@ end = file_path.index('mns') + 17
|
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
|
|
9
|
-
import mns_common.component.
|
|
9
|
+
import mns_common.component.deal.deal_service_api as deal_service_api
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
## 自动一键打新
|
|
13
13
|
def auto_ipo_buy():
|
|
14
|
-
|
|
14
|
+
deal_service_api.auto_ipo_buy('easy_trader')
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
if __name__ == '__main__':
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import mns_common.component.deal.deal_service_api as deal_service_api
|
|
9
|
+
from mns_common.component.deal.terminal_enum import TerminalEnum
|
|
10
|
+
import time
|
|
11
|
+
from loguru import logger
|
|
12
|
+
|
|
13
|
+
# qmt 自动登录
|
|
14
|
+
def qmt_auto_login():
|
|
15
|
+
deal_service_api.auto_login(TerminalEnum.QMT.terminal_code)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# 同花顺自动登陆
|
|
19
|
+
def ths_auto_login():
|
|
20
|
+
deal_service_api.auto_login(TerminalEnum.EASY_TRADER.terminal_code)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def auto_login():
|
|
24
|
+
logger.info("打开ths下单程序")
|
|
25
|
+
ths_auto_login()
|
|
26
|
+
time.sleep(5)
|
|
27
|
+
logger.info("打开qmt下单程序")
|
|
28
|
+
qmt_auto_login()
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
if __name__ == '__main__':
|
|
32
|
+
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
|
|
|
@@ -11,11 +11,13 @@ import mns_common.constant.db_name_constant as db_name_constant
|
|
|
11
11
|
import datetime
|
|
12
12
|
import mns_common.component.cache.cache_service as cache_service
|
|
13
13
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
14
|
-
import mns_common.component.
|
|
14
|
+
import mns_common.component.deal.deal_service_api as deal_service_api
|
|
15
15
|
from loguru import logger
|
|
16
16
|
from mns_common.utils.async_fun import async_fun
|
|
17
|
+
import mns_common.component.price.trade_price_service_api as trade_price_service_api
|
|
17
18
|
|
|
18
19
|
mongodb_util = MongodbUtil('27017')
|
|
20
|
+
from mns_common.constant.price_enum import PriceEnum
|
|
19
21
|
|
|
20
22
|
AUTO_SELL_KEY = "AUTO_SELL_KEY"
|
|
21
23
|
|
|
@@ -51,11 +53,11 @@ def sell_stock_detail(realtime_quotes_now_position, position_stock_df, str_day,
|
|
|
51
53
|
try:
|
|
52
54
|
|
|
53
55
|
symbol = stock_one.symbol
|
|
54
|
-
sell_price =
|
|
56
|
+
sell_price = trade_price_service_api.get_trade_price(symbol, PriceEnum.SEll_PRICE_LIMIT.price_code)
|
|
55
57
|
position_stock_df_one = position_stock_df.loc[position_stock_df['symbol'] == symbol]
|
|
56
58
|
available_position = list(position_stock_df_one['available_position'])[0]
|
|
57
59
|
if sell_signal(stock_one, now_date, position_stock_df_one):
|
|
58
|
-
sell_result =
|
|
60
|
+
sell_result = deal_service_api.trade_sell(symbol, sell_price, available_position)
|
|
59
61
|
if "message" in sell_result:
|
|
60
62
|
result_msg = sell_result['message']
|
|
61
63
|
if result_msg == 'success':
|
|
@@ -107,10 +109,10 @@ def update_position_status(symbol, sell_entrust_no, str_day):
|
|
|
107
109
|
mongodb_util.update_many(update_query, new_values, db_name_constant.POSITION_STOCK)
|
|
108
110
|
|
|
109
111
|
|
|
110
|
-
import mns_common.
|
|
112
|
+
import mns_common.component.em.em_stock_info_api as em_stock_info_api
|
|
111
113
|
|
|
112
114
|
if __name__ == '__main__':
|
|
113
|
-
sell_price_01 =
|
|
115
|
+
sell_price_01 = trade_price_service_api.get_trade_price('002336',PriceEnum.SEll_PRICE_LIMIT.price_code)
|
|
114
116
|
while True:
|
|
115
|
-
|
|
116
|
-
|
|
117
|
+
real_time_quotes_now = em_stock_info_api.get_a_stock_info()
|
|
118
|
+
auto_sell_stock(real_time_quotes_now)
|