mns-scheduler 1.1.8.4__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/base/__init__.py +1 -1
- mns_scheduler/company_info/base/sync_company_base_info_api.py +171 -79
- mns_scheduler/company_info/base/sync_company_hold_info_api.py +3 -6
- mns_scheduler/company_info/base/sync_company_product_area_industry.py +161 -0
- mns_scheduler/company_info/clean/__init__.py +1 -1
- mns_scheduler/company_info/clean/company_info_clean_api.py +29 -9
- mns_scheduler/company_info/constant/__init__.py +1 -1
- mns_scheduler/company_info/constant/company_constant_data.py +285 -184
- 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/__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 +1 -1
- mns_scheduler/company_info/remark/company_remark_info_sync.py +3 -3
- 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 +21 -16
- 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 +3 -3
- 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 +57 -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_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/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 +1 -1
- mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +1 -1
- mns_scheduler/irm/stock_irm_cninfo_service.py +12 -8
- 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 +60 -32
- mns_scheduler/trade/auto_login/trader_auto_service.py +6 -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 +26 -9
- 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 +256 -55
- mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +33 -90
- mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +24 -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 +177 -91
- {mns_scheduler-1.1.8.4.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.1.8.4.dist-info → mns_scheduler-1.4.3.2.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/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/{big_deal → company_info/announce}/__init__.py +0 -0
- /mns_scheduler/{2014-2015-test → finance/em}/__init__.py +0 -0
- /mns_scheduler/{debt → finance/xue_qiu}/__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.3.2.dist-info}/top_level.txt +0 -0
|
@@ -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,17 +2,16 @@ 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
|
|
|
@@ -41,37 +40,49 @@ mongodb_util = MongodbUtil('27017')
|
|
|
41
40
|
fixed_optional_list = ['899050', '881157']
|
|
42
41
|
|
|
43
42
|
|
|
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
|
-
|
|
51
|
-
|
|
52
43
|
def add_fixed_optional():
|
|
53
|
-
ths_cookie = get_ths_cookie()
|
|
44
|
+
ths_cookie = cookie_info_service.get_ths_cookie()
|
|
54
45
|
for symbol in fixed_optional_list:
|
|
55
46
|
ths_self_choose_api.add_stock_to_account(symbol, ths_cookie)
|
|
56
47
|
|
|
57
48
|
|
|
58
49
|
def delete_all_self_choose_stocks():
|
|
59
|
-
ths_cookie = get_ths_cookie()
|
|
50
|
+
ths_cookie = cookie_info_service.get_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():
|
|
59
|
+
ths_cookie = cookie_info_service.get_ths_cookie()
|
|
60
|
+
# 固定自选
|
|
69
61
|
self_choose_symbol_df = mongodb_util.find_all_data(db_name_constant.SELF_CHOOSE_STOCK)
|
|
70
62
|
if data_frame_util.is_not_empty(self_choose_symbol_df):
|
|
71
63
|
self_choose_symbol_df = self_choose_symbol_df.sort_values(by=['str_now_date'], ascending=False)
|
|
72
64
|
for stock_one in self_choose_symbol_df.itertuples():
|
|
73
65
|
ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
|
|
74
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()
|
|
75
86
|
query_plate = {'self_type': {
|
|
76
87
|
"$in": [self_choose_constant.SELF_CHOOSE_THS_CONCEPT,
|
|
77
88
|
self_choose_constant.SELF_CHOOSE_THS_INDUSTRY]}}
|
|
@@ -89,42 +100,59 @@ def add_trade_stocks():
|
|
|
89
100
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
90
101
|
last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
|
|
91
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([])
|
|
92
109
|
trade_stocks_df = mongodb_util.find_query_data(db_name_constant.BUY_STOCK_NAME, query)
|
|
93
|
-
ths_cookie = get_ths_cookie()
|
|
94
110
|
if data_frame_util.is_not_empty(trade_stocks_df):
|
|
95
|
-
|
|
96
|
-
|
|
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)
|
|
97
116
|
|
|
98
117
|
|
|
99
118
|
# 添加连板到自选
|
|
100
119
|
def add_continue_boards_zt_stocks():
|
|
101
|
-
ths_cookie = get_ths_cookie()
|
|
120
|
+
ths_cookie = cookie_info_service.get_ths_cookie()
|
|
102
121
|
now_date = datetime.now()
|
|
103
122
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
104
123
|
if trade_date_common_service_api.is_trade_day(str_day):
|
|
105
|
-
|
|
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)
|
|
106
130
|
else:
|
|
107
131
|
str_day = trade_date_common_service_api.get_last_trade_day(str_day)
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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():
|
|
113
138
|
ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
|
|
114
139
|
|
|
115
140
|
|
|
116
141
|
# 自选股操作 删除当天自选股 增加新的连板股票 添加固定选择自选
|
|
117
142
|
def self_choose_stock_handle():
|
|
118
143
|
delete_all_self_choose_stocks()
|
|
144
|
+
# 固定自选板块
|
|
145
|
+
add_fixed_optional()
|
|
146
|
+
# 添加同花顺概念
|
|
147
|
+
add_self_choose_concept()
|
|
148
|
+
# 连板股票
|
|
149
|
+
add_continue_boards_zt_stocks()
|
|
119
150
|
# 自己买入的股票
|
|
120
151
|
add_trade_stocks()
|
|
121
|
-
#
|
|
122
|
-
|
|
123
|
-
# 连板股票
|
|
124
|
-
# add_continue_boards_zt_stocks()
|
|
125
|
-
# 固定自选
|
|
126
|
-
add_fixed_optional()
|
|
152
|
+
# 添加自选股票
|
|
153
|
+
add_self_choose_symbol()
|
|
127
154
|
|
|
128
155
|
|
|
129
156
|
if __name__ == '__main__':
|
|
157
|
+
# add_continue_boards_zt_stocks()
|
|
130
158
|
self_choose_stock_handle()
|
|
@@ -2,13 +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
|
-
|
|
11
|
+
from loguru import logger
|
|
12
12
|
|
|
13
13
|
# qmt 自动登录
|
|
14
14
|
def qmt_auto_login():
|
|
@@ -21,9 +21,11 @@ def ths_auto_login():
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
def auto_login():
|
|
24
|
-
|
|
25
|
-
time.sleep(5)
|
|
24
|
+
logger.info("打开ths下单程序")
|
|
26
25
|
ths_auto_login()
|
|
26
|
+
time.sleep(5)
|
|
27
|
+
logger.info("打开qmt下单程序")
|
|
28
|
+
qmt_auto_login()
|
|
27
29
|
|
|
28
30
|
|
|
29
31
|
if __name__ == '__main__':
|
|
@@ -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)
|
|
@@ -2,23 +2,23 @@ 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
|
import pandas as pd
|
|
10
10
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
11
11
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
12
|
-
import datetime
|
|
13
|
-
|
|
12
|
+
from datetime import datetime
|
|
13
|
+
from mns_common.component.deal.terminal_enum import TerminalEnum
|
|
14
14
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
15
15
|
|
|
16
16
|
mongodb_util = MongodbUtil('27017')
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
# 同步持仓
|
|
20
|
-
def
|
|
21
|
-
now_date = datetime.
|
|
20
|
+
def sync_position_ths():
|
|
21
|
+
now_date = datetime.now()
|
|
22
22
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
23
23
|
query_exist = {'str_day': str_day}
|
|
24
24
|
if mongodb_util.exist_data_query(db_name_constant.POSITION_STOCK, query_exist):
|
|
@@ -52,5 +52,38 @@ def sync_position():
|
|
|
52
52
|
mongodb_util.save_mongo(position_df, db_name_constant.POSITION_STOCK)
|
|
53
53
|
|
|
54
54
|
|
|
55
|
+
def sync_position_qmt():
|
|
56
|
+
now_date = datetime.now()
|
|
57
|
+
str_day = now_date.strftime('%Y-%m-%d')
|
|
58
|
+
query_exist = {'str_day': str_day}
|
|
59
|
+
# if mongodb_util.exist_data_query(db_name_constant.POSITION_STOCK, query_exist):
|
|
60
|
+
# return None
|
|
61
|
+
position_list = deal_service_api.get_position(TerminalEnum.QMT.terminal_code)
|
|
62
|
+
if len(position_list) == 0:
|
|
63
|
+
return None
|
|
64
|
+
position_df = pd.DataFrame(position_list)
|
|
65
|
+
position_df = position_df.rename(columns={
|
|
66
|
+
"stock_code": "symbol",
|
|
67
|
+
"avg_price": "cost_price",
|
|
68
|
+
"profit_loss": "floating_profit_loss",
|
|
69
|
+
"market_value": "flow_mv",
|
|
70
|
+
"can_use_volume": "available_position",
|
|
71
|
+
"frozen_volume": "frozen_position",
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
position_df['cost_price'] = round(position_df['cost_price'], 2)
|
|
75
|
+
position_df['open_price'] = round(position_df['open_price'], 2)
|
|
76
|
+
|
|
77
|
+
position_df['open_position'] = position_df['available_position'] + position_df['frozen_position'] + position_df[
|
|
78
|
+
'on_road_volume']
|
|
79
|
+
|
|
80
|
+
position_df['symbol'] = position_df['symbol'].str.slice(0, 6)
|
|
81
|
+
|
|
82
|
+
position_df["_id"] = position_df['symbol'] + '-' + str_day
|
|
83
|
+
position_df["str_day"] = str_day
|
|
84
|
+
position_df["valid"] = True
|
|
85
|
+
mongodb_util.save_mongo(position_df, db_name_constant.POSITION_STOCK)
|
|
86
|
+
|
|
87
|
+
|
|
55
88
|
if __name__ == '__main__':
|
|
56
|
-
|
|
89
|
+
sync_position_qmt()
|
|
@@ -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_common.utils.cmd_util as cmd_util
|
|
@@ -11,26 +11,42 @@ import mns_scheduler.trade.auto_login.trader_auto_service as trader_auto_service
|
|
|
11
11
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
12
12
|
from loguru import logger
|
|
13
13
|
|
|
14
|
-
#
|
|
15
|
-
TRADER_SERVER_PATH = 'H:\\
|
|
14
|
+
# 交易服务端
|
|
15
|
+
TRADER_SERVER_PATH = 'H:\\mns_trader_server.bat'
|
|
16
16
|
# 实时行情同步任务 python名称
|
|
17
|
-
TRADER_SERVER_NAME = "
|
|
17
|
+
TRADER_SERVER_NAME = "mns_trader_server"
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
# 打开交易客户端
|
|
21
21
|
def open_trader_terminal():
|
|
22
|
-
#
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
# 打开 [交易web服务端]
|
|
23
|
+
logger.info('打开 [交易web服务端]')
|
|
24
|
+
if bool(1- is_open_trader_server()):
|
|
25
|
+
cmd_util.open_bat_file(TRADER_SERVER_PATH)
|
|
26
|
+
time.sleep(10)
|
|
27
|
+
logger.info('自动登陆ths和qmt')
|
|
28
|
+
# 自动登陆ths和qmt
|
|
25
29
|
trader_auto_service.auto_login()
|
|
26
30
|
time.sleep(5)
|
|
27
|
-
#
|
|
31
|
+
# 杀死[交易web服务端],使用同花顺需要先打开xiadan.exe,在重新打开[交易web服务端]
|
|
32
|
+
logger.info('杀死[交易web服务端]')
|
|
28
33
|
kill_server()
|
|
29
34
|
time.sleep(5)
|
|
30
|
-
|
|
35
|
+
logger.info('重新打开 [交易web服务端]')
|
|
36
|
+
# 重新打开 [交易web服务端]
|
|
31
37
|
cmd_util.open_bat_file(TRADER_SERVER_PATH)
|
|
32
38
|
|
|
33
39
|
|
|
40
|
+
def is_open_trader_server():
|
|
41
|
+
all_cmd_processes = cmd_util.get_all_process()
|
|
42
|
+
all_cmd_processes_trader = all_cmd_processes.loc[
|
|
43
|
+
(all_cmd_processes['total_info'].str.contains(TRADER_SERVER_NAME, case=False, na=False))]
|
|
44
|
+
if data_frame_util.is_not_empty(all_cmd_processes_trader):
|
|
45
|
+
return True
|
|
46
|
+
else:
|
|
47
|
+
return False
|
|
48
|
+
|
|
49
|
+
|
|
34
50
|
def kill_server():
|
|
35
51
|
all_cmd_processes = cmd_util.get_all_process()
|
|
36
52
|
all_cmd_processes_trader = all_cmd_processes.loc[
|
|
@@ -45,4 +61,5 @@ def kill_server():
|
|
|
45
61
|
|
|
46
62
|
|
|
47
63
|
if __name__ == '__main__':
|
|
64
|
+
# kill_server()
|
|
48
65
|
open_trader_terminal()
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
|
|
9
|
+
import mns_common.component.tfp.stock_tfp_api as stock_tfp_api
|
|
10
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
11
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
12
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
13
|
+
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
14
|
+
|
|
15
|
+
mongodb_util = MongodbUtil('27017')
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def sync_stock_tfp(str_day):
|
|
19
|
+
stock_tfp_df = stock_tfp_api.get_stock_tfp_by_day(str_day)
|
|
20
|
+
if data_frame_util.is_not_empty(stock_tfp_df):
|
|
21
|
+
stock_tfp_df['sus_begin_time'] = stock_tfp_df['sus_begin_time'].fillna('无')
|
|
22
|
+
stock_tfp_df['sus_end_time'] = stock_tfp_df['sus_end_time'].fillna('无')
|
|
23
|
+
stock_tfp_df['resume_time'] = stock_tfp_df['resume_time'].fillna('无')
|
|
24
|
+
stock_tfp_df['_id'] = stock_tfp_df['symbol'] + "_" + str_day
|
|
25
|
+
# 排除name列中值包含'B'的行
|
|
26
|
+
stock_tfp_df = stock_tfp_df[~stock_tfp_df['name'].str.contains('B', na=False)]
|
|
27
|
+
|
|
28
|
+
stock_tfp_df['sus_begin_time'] = stock_tfp_df['sus_begin_time'].astype(str)
|
|
29
|
+
stock_tfp_df['sus_end_time'] = stock_tfp_df['sus_end_time'].astype(str)
|
|
30
|
+
stock_tfp_df['resume_time'] = stock_tfp_df['resume_time'].astype(str)
|
|
31
|
+
stock_tfp_df['sus_begin_date'] = stock_tfp_df['sus_begin_date'].astype(str)
|
|
32
|
+
stock_tfp_df = common_service_fun_api.exclude_st_symbol(stock_tfp_df)
|
|
33
|
+
# 根据条件设置新列'type'的值
|
|
34
|
+
|
|
35
|
+
# 初始化类型值
|
|
36
|
+
stock_tfp_df['type'] = '0'
|
|
37
|
+
stock_tfp_df.loc[stock_tfp_df['sus_reason'] == '盘中停牌', 'type'] = '0'
|
|
38
|
+
stock_tfp_df.loc[stock_tfp_df['sus_reason'] == '停牌一天', 'type'] = '1'
|
|
39
|
+
stock_tfp_df.loc[stock_tfp_df['sus_reason'] == '连续停牌', 'type'] = '2'
|
|
40
|
+
stock_tfp_df.loc[stock_tfp_df['sus_reason'] == '刊登重要公告', 'type'] = '3'
|
|
41
|
+
stock_tfp_df.loc[stock_tfp_df['sus_reason'] == '拟筹划重大资产重组', 'type'] = '4'
|
|
42
|
+
stock_tfp_df['valid'] = True
|
|
43
|
+
stock_tfp_df['str_day'] = str_day
|
|
44
|
+
stock_tfp_df.loc[stock_tfp_df['type'] == '2', 'valid'] = False
|
|
45
|
+
stock_tfp_df.loc[stock_tfp_df['type'] == '1', 'valid'] = False
|
|
46
|
+
|
|
47
|
+
stock_tfp_df = stock_tfp_df.fillna(0)
|
|
48
|
+
|
|
49
|
+
mongodb_util.save_mongo(stock_tfp_df, db_name_constant.STOCK_TFP_INFO)
|
|
50
|
+
|
|
51
|
+
return stock_tfp_df
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
if __name__ == '__main__':
|
|
55
|
+
df = sync_stock_tfp('2025-07-30')
|
|
56
|
+
print(df)
|
|
@@ -27,19 +27,4 @@ def sync_stock_zb_pool(str_now_day):
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
if __name__ == '__main__':
|
|
30
|
-
sync_stock_zb_pool('
|
|
31
|
-
sync_date = date_handle_util.add_date_day('20231214', 1)
|
|
32
|
-
|
|
33
|
-
now_date = datetime.now()
|
|
34
|
-
|
|
35
|
-
str_now_day_01 = sync_date.strftime('%Y-%m-%d')
|
|
36
|
-
|
|
37
|
-
while now_date > sync_date:
|
|
38
|
-
stock_zb_pool_df = sync_stock_zb_pool(str_now_day_01)
|
|
39
|
-
if stock_zb_pool_df is None:
|
|
40
|
-
sync_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_now_day_01), 1)
|
|
41
|
-
str_now_day_01 = sync_date.strftime('%Y-%m-%d')
|
|
42
|
-
continue
|
|
43
|
-
mongodb_util.save_mongo(stock_zb_pool_df, 'stock_zb_pool')
|
|
44
|
-
sync_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_now_day_01), 1)
|
|
45
|
-
str_now_day_01 = sync_date.strftime('%Y-%m-%d')
|
|
30
|
+
sync_stock_zb_pool('2025-04-18')
|
|
@@ -9,7 +9,7 @@ import pandas as pd
|
|
|
9
9
|
from loguru import logger
|
|
10
10
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
11
11
|
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
12
|
-
import mns_common.
|
|
12
|
+
import mns_common.component.em.em_stock_info_api as em_stock_info_api
|
|
13
13
|
import mns_common.utils.date_handle_util as date_handle_util
|
|
14
14
|
import mns_common.component.company.company_common_service_api as company_common_service_api
|
|
15
15
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
@@ -138,7 +138,7 @@ def sync_stock_high_chg_pool_list(str_day, symbol_list):
|
|
|
138
138
|
now_date = datetime.now()
|
|
139
139
|
now_day = now_date.strftime('%Y-%m-%d')
|
|
140
140
|
|
|
141
|
-
real_time_quotes_now_init =
|
|
141
|
+
real_time_quotes_now_init = em_stock_info_api.get_a_stock_info()
|
|
142
142
|
|
|
143
143
|
last_trade_zt_pool = zt_common_service_api.get_last_trade_day_zt(str_day)
|
|
144
144
|
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
9
|
+
from loguru import logger
|
|
10
|
+
import mns_common.utils.date_handle_util as date_handle_util
|
|
11
|
+
mongodb_util = MongodbUtil('27017')
|
|
12
|
+
|
|
13
|
+
from mns_scheduler.db.script.sync.remote_mongo_util import RemoteMongodbUtil
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
remote_mongodb_util = RemoteMongodbUtil('27017')
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def fix_error_deal_days(db_name):
|
|
20
|
+
realtime_quotes_now_zt_new_kc_open_df = mongodb_util.find_query_data(db_name, {})
|
|
21
|
+
realtime_quotes_now_zt_new_kc_open_df['id_key'] = realtime_quotes_now_zt_new_kc_open_df['_id']
|
|
22
|
+
for stock_one in realtime_quotes_now_zt_new_kc_open_df.itertuples():
|
|
23
|
+
try:
|
|
24
|
+
symbol = stock_one.symbol
|
|
25
|
+
str_day = stock_one.str_day
|
|
26
|
+
query = {'symbol': symbol, 'date': {"$lt": date_handle_util.no_slash_date(str_day)}}
|
|
27
|
+
deal_days = mongodb_util.count(query, 'stock_qfq_daily')
|
|
28
|
+
new_values = {"$set": {"deal_days": deal_days}}
|
|
29
|
+
id_key = stock_one.id_key
|
|
30
|
+
update_query = {'_id': id_key}
|
|
31
|
+
mongodb_util.update_many(update_query, new_values, db_name)
|
|
32
|
+
logger.info("更新到:{},{}", symbol, str_day)
|
|
33
|
+
except BaseException as e:
|
|
34
|
+
logger.error("出现异常:{},{},{}", symbol, str_day, e)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
if __name__ == '__main__':
|
|
38
|
+
# db_name_0 = 'realtime_quotes_now_zt_new_kc_open'
|
|
39
|
+
db_name_01 = 'stock_high_chg_pool'
|
|
40
|
+
# fix_error_deal_days(db_name_0)
|
|
41
|
+
fix_error_deal_days(db_name_01)
|
|
@@ -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.zt.open_data.kcx_high_chg_open_data_sync as kcx_high_chg_open_data_sync
|
|
@@ -83,7 +83,7 @@ def fix_miss_data(str_end):
|
|
|
83
83
|
|
|
84
84
|
|
|
85
85
|
if __name__ == '__main__':
|
|
86
|
-
kcx_high_chg_open_data_sync.sync_all_kc_zt_data('
|
|
86
|
+
kcx_high_chg_open_data_sync.sync_all_kc_zt_data('2025-06-30', None)
|
|
87
87
|
# sync_all_kc_zt_data('2023-08-16')
|
|
88
88
|
# sync_all_kc_zt_data('2023-07-07')
|
|
89
89
|
# realtime_quotes_now_zt_new_kc_open_sync()
|