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
|
@@ -8,7 +8,6 @@ sys.path.append(project_path)
|
|
|
8
8
|
import pandas as pd
|
|
9
9
|
import mns_common.api.akshare.stock_zt_pool_api as stock_zt_pool_api
|
|
10
10
|
import mns_common.utils.date_handle_util as date_handle_util
|
|
11
|
-
import mns_common.component.concept.ths_concept_common_service_api as ths_concept_common_service_api
|
|
12
11
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
13
12
|
import mns_common.component.company.company_common_service_api as company_common_service_api
|
|
14
13
|
from loguru import logger
|
|
@@ -17,8 +16,13 @@ import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
|
17
16
|
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
18
17
|
import mns_common.api.ths.zt.ths_stock_zt_pool_v2_api as ths_stock_zt_pool_v2_api
|
|
19
18
|
import mns_common.component.zt.zt_common_service_api as zt_common_service_api
|
|
20
|
-
import mns_common.
|
|
19
|
+
import mns_common.component.em.em_real_time_quotes_api as em_real_time_quotes_api
|
|
21
20
|
from datetime import datetime
|
|
21
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
22
|
+
import mns_common.component.deal.deal_service_api as deal_service_api
|
|
23
|
+
import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
|
|
24
|
+
import mns_common.component.main_line.main_line_zt_reason_service as main_line_zt_reason_service
|
|
25
|
+
from mns_common.utils.async_fun import async_fun
|
|
22
26
|
|
|
23
27
|
'''
|
|
24
28
|
东方财富涨停池
|
|
@@ -28,7 +32,7 @@ mongodb_util = MongodbUtil('27017')
|
|
|
28
32
|
|
|
29
33
|
ZT_FIELD = ['_id', 'symbol', 'name', 'now_price', 'chg', 'first_closure_time',
|
|
30
34
|
'last_closure_time', 'connected_boards_numbers',
|
|
31
|
-
'zt_reason', 'closure_funds',
|
|
35
|
+
'zt_reason', 'zt_analysis', 'closure_funds',
|
|
32
36
|
# 'closure_funds_per_amount', 'closure_funds_per_flow_mv',
|
|
33
37
|
'frying_plates_numbers',
|
|
34
38
|
# 'statistics_detail', 'zt_type', 'market_code',
|
|
@@ -39,63 +43,56 @@ ZT_FIELD = ['_id', 'symbol', 'name', 'now_price', 'chg', 'first_closure_time',
|
|
|
39
43
|
'third_sw_industry', 'ths_concept_name',
|
|
40
44
|
'ths_concept_code', 'ths_concept_sync_day', 'em_industry',
|
|
41
45
|
'mv_circulation_ratio', 'ths_concept_list_info', 'kpl_plate_name',
|
|
42
|
-
'kpl_plate_list_info', 'company_type', 'diff_days', '
|
|
46
|
+
'kpl_plate_list_info', 'company_type', 'diff_days', 'amount',
|
|
43
47
|
'list_date',
|
|
44
48
|
'exchange', 'flow_mv', 'total_mv',
|
|
45
49
|
'classification', 'flow_mv_sp', 'total_mv_sp', 'flow_mv_level',
|
|
46
|
-
'amount_level', 'new_stock', 'list_date_01', 'index', 'str_day']
|
|
50
|
+
'amount_level', 'new_stock', 'list_date_01', 'index', 'str_day', 'main_line', 'sub_main_line']
|
|
47
51
|
|
|
48
52
|
|
|
49
53
|
def save_zt_info(str_day):
|
|
50
54
|
if bool(1 - trade_date_common_service_api.is_trade_day(str_day)):
|
|
51
|
-
return
|
|
55
|
+
return pd.DataFrame()
|
|
52
56
|
|
|
53
57
|
stock_em_zt_pool_df_data = stock_zt_pool_api.stock_em_zt_pool_df(
|
|
54
58
|
date_handle_util.no_slash_date(str_day))
|
|
55
59
|
|
|
56
60
|
# fix 涨停池没有的股票
|
|
57
|
-
stock_em_zt_pool_df_data =
|
|
61
|
+
stock_em_zt_pool_df_data = handle_miss_zt_data(stock_em_zt_pool_df_data.copy(), str_day)
|
|
58
62
|
|
|
59
|
-
|
|
63
|
+
try:
|
|
64
|
+
# 同花顺问财涨停池
|
|
65
|
+
ths_zt_pool_df_data = ths_stock_zt_pool_v2_api.get_ths_stock_zt_reason_with_cache(str_day)
|
|
66
|
+
except BaseException as e:
|
|
67
|
+
logger.error("使用问财同步ths涨停数据异常:{}", e)
|
|
68
|
+
ths_zt_pool_df_data = pd.DataFrame()
|
|
60
69
|
|
|
61
|
-
stock_em_zt_pool_df_data =
|
|
70
|
+
stock_em_zt_pool_df_data = handle_ths_em_diff_data(ths_zt_pool_df_data, stock_em_zt_pool_df_data)
|
|
71
|
+
# 更新涨停分析和原因数据
|
|
72
|
+
update_zt_reason_analysis(stock_em_zt_pool_df_data, str_day)
|
|
62
73
|
|
|
63
|
-
stock_em_zt_pool_df_data = common_service_fun_api.
|
|
74
|
+
stock_em_zt_pool_df_data = common_service_fun_api.total_mv_classification(stock_em_zt_pool_df_data.copy())
|
|
64
75
|
|
|
65
|
-
stock_em_zt_pool_df_data =
|
|
76
|
+
stock_em_zt_pool_df_data = common_service_fun_api.classify_symbol(stock_em_zt_pool_df_data.copy())
|
|
66
77
|
|
|
67
|
-
|
|
68
|
-
last_trade_day_zt_df = zt_common_service_api.get_last_trade_day_zt(str_day)
|
|
78
|
+
stock_em_zt_pool_df_data = common_service_fun_api.symbol_amount_simple(stock_em_zt_pool_df_data.copy())
|
|
69
79
|
|
|
70
|
-
|
|
71
|
-
# 同花顺问财涨停池
|
|
72
|
-
ths_zt_pool_df_data = ths_stock_zt_pool_v2_api.get_ths_stock_zt_reason_with_cache(str_day)
|
|
73
|
-
|
|
74
|
-
# del stock_em_zt_pool_df_data['ths_concept_name']
|
|
75
|
-
# del stock_em_zt_pool_df_data['ths_concept_code']
|
|
76
|
-
|
|
77
|
-
for stock_one in stock_em_zt_pool_df_data.itertuples():
|
|
78
|
-
try:
|
|
79
|
-
stock_em_zt_pool_df_data = ths_concept_common_service_api.set_last_ths_concept(stock_one.symbol,
|
|
80
|
-
stock_em_zt_pool_df_data,
|
|
81
|
-
str_day)
|
|
82
|
-
# 设置连板数目
|
|
83
|
-
stock_em_zt_pool_df_data = set_connected_boards_numbers(stock_em_zt_pool_df_data,
|
|
84
|
-
stock_one.symbol, last_trade_day_zt_df)
|
|
85
|
-
|
|
86
|
-
ths_zt_pool_one_df = ths_zt_pool_df_data.loc[ths_zt_pool_df_data['symbol'] == stock_one.symbol]
|
|
87
|
-
if data_frame_util.is_empty(ths_zt_pool_one_df):
|
|
88
|
-
stock_em_zt_pool_df_data['zt_reason'] = '0'
|
|
89
|
-
continue
|
|
90
|
-
stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'zt_reason'] = \
|
|
91
|
-
list(ths_zt_pool_one_df['zt_reason'])[0]
|
|
92
|
-
except BaseException as e:
|
|
93
|
-
stock_em_zt_pool_df_data['zt_reason'] = '0'
|
|
94
|
-
logger.error("出现异常:{}", e)
|
|
95
|
-
except BaseException as e:
|
|
96
|
-
stock_em_zt_pool_df_data['zt_reason'] = '0'
|
|
97
|
-
logger.error("出现异常:{}", e)
|
|
80
|
+
stock_em_zt_pool_df_data = company_common_service_api.amendment_industry(stock_em_zt_pool_df_data.copy())
|
|
98
81
|
|
|
82
|
+
# 上个交易交易日涨停股票
|
|
83
|
+
last_trade_day_zt_df = zt_common_service_api.get_last_trade_day_zt(str_day)
|
|
84
|
+
# 设置连板
|
|
85
|
+
stock_em_zt_pool_df_data = set_connected_boards_numbers(stock_em_zt_pool_df_data.copy(),
|
|
86
|
+
last_trade_day_zt_df.copy())
|
|
87
|
+
|
|
88
|
+
# 添加主线信息
|
|
89
|
+
stock_em_zt_pool_df_data = main_line_zt_reason_service.merge_main_line_info(str_day,
|
|
90
|
+
stock_em_zt_pool_df_data.copy())
|
|
91
|
+
# 添加涨停原因和分析信息
|
|
92
|
+
stock_em_zt_pool_df_data = main_line_zt_reason_service.merge_zt_reason_info(str_day,
|
|
93
|
+
stock_em_zt_pool_df_data.copy())
|
|
94
|
+
|
|
95
|
+
stock_em_zt_pool_df_data['first_closure_time'] = stock_em_zt_pool_df_data['first_closure_time'].str.strip()
|
|
99
96
|
stock_em_zt_pool_df_data['list_date'] = stock_em_zt_pool_df_data['list_date'].apply(
|
|
100
97
|
lambda x: pd.to_numeric(x, errors="coerce"))
|
|
101
98
|
|
|
@@ -116,54 +113,80 @@ def save_zt_info(str_day):
|
|
|
116
113
|
stock_em_zt_pool_df_data = stock_em_zt_pool_df_data.sort_values(by=['first_closure_time'])
|
|
117
114
|
|
|
118
115
|
# 重置索引,并将排序结果保存到新的"index"列中
|
|
119
|
-
|
|
120
116
|
stock_em_zt_pool_df_data['str_day'] = str_day
|
|
121
117
|
stock_em_zt_pool_df_data['_id'] = stock_em_zt_pool_df_data['symbol'] + "_" + str_day
|
|
118
|
+
stock_em_zt_pool_df_data.drop_duplicates('symbol', keep='last', inplace=True)
|
|
122
119
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
if data_frame_util.is_empty(
|
|
126
|
-
|
|
120
|
+
query_today_zt = {'str_day': str_day}
|
|
121
|
+
stock_exist_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query_today_zt)
|
|
122
|
+
if data_frame_util.is_empty(stock_exist_zt_pool_df):
|
|
123
|
+
today_new_zt_pool_df = stock_em_zt_pool_df_data.copy()
|
|
127
124
|
else:
|
|
128
|
-
|
|
125
|
+
today_new_zt_pool_df = stock_em_zt_pool_df_data.loc[
|
|
126
|
+
~stock_em_zt_pool_df_data['symbol'].isin(stock_exist_zt_pool_df['symbol'])]
|
|
129
127
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
128
|
+
mongodb_util.save_mongo(today_new_zt_pool_df, db_name_constant.STOCK_ZT_POOL)
|
|
129
|
+
stock_em_zt_pool_df_data = pd.concat([stock_exist_zt_pool_df, today_new_zt_pool_df])
|
|
130
|
+
# 保存连板股票主线
|
|
131
|
+
save_last_trade_day_main_line(str_day, stock_em_zt_pool_df_data)
|
|
132
|
+
|
|
133
|
+
stock_em_zt_pool_df_data.fillna('', inplace=True)
|
|
134
|
+
stock_em_zt_pool_df_data = stock_em_zt_pool_df_data[ZT_FIELD]
|
|
135
135
|
return stock_em_zt_pool_df_data
|
|
136
136
|
|
|
137
137
|
|
|
138
138
|
# 设置连板数目
|
|
139
|
-
def set_connected_boards_numbers(stock_em_zt_pool_df_data,
|
|
140
|
-
|
|
139
|
+
def set_connected_boards_numbers(stock_em_zt_pool_df_data, last_trade_day_zt_df):
|
|
140
|
+
if data_frame_util.is_empty(stock_em_zt_pool_df_data):
|
|
141
|
+
return stock_em_zt_pool_df_data
|
|
142
|
+
if data_frame_util.is_empty(last_trade_day_zt_df):
|
|
143
|
+
return stock_em_zt_pool_df_data
|
|
144
|
+
# 连板股票
|
|
145
|
+
connected_boards_df_copy = last_trade_day_zt_df.loc[
|
|
141
146
|
last_trade_day_zt_df['symbol'].isin(stock_em_zt_pool_df_data['symbol'])]
|
|
142
147
|
|
|
148
|
+
connected_boards_df = connected_boards_df_copy.copy()
|
|
149
|
+
#
|
|
143
150
|
connected_boards_df['connected_boards_numbers'] = connected_boards_df['connected_boards_numbers'] + 1
|
|
144
151
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
152
|
+
symbol_mapping_connected_boards_numbers = dict(
|
|
153
|
+
zip(connected_boards_df['symbol'], connected_boards_df['connected_boards_numbers']))
|
|
154
|
+
# 使用map进行替换,不匹配的保持原值
|
|
155
|
+
stock_em_zt_pool_df_data['connected_boards_numbers'] = stock_em_zt_pool_df_data['symbol'].map(
|
|
156
|
+
symbol_mapping_connected_boards_numbers).fillna(1)
|
|
150
157
|
return stock_em_zt_pool_df_data
|
|
151
158
|
|
|
152
159
|
|
|
153
|
-
def
|
|
160
|
+
def handle_miss_zt_data(stock_em_zt_pool_df_data, str_day):
|
|
154
161
|
now_date = datetime.now()
|
|
155
162
|
now_day = now_date.strftime('%Y-%m-%d')
|
|
156
163
|
if now_day == str_day:
|
|
157
|
-
real_time_quotes_all_stocks_df =
|
|
164
|
+
real_time_quotes_all_stocks_df = em_real_time_quotes_api.get_real_time_quotes_now(None, None)
|
|
165
|
+
if data_frame_util.is_empty(real_time_quotes_all_stocks_df):
|
|
166
|
+
return stock_em_zt_pool_df_data
|
|
158
167
|
real_time_quotes_all_stocks_df = real_time_quotes_all_stocks_df.loc[
|
|
159
168
|
(real_time_quotes_all_stocks_df['wei_bi'] == 100) & (real_time_quotes_all_stocks_df['chg'] >= 9)]
|
|
160
|
-
|
|
169
|
+
miss_zt_data_df_copy = real_time_quotes_all_stocks_df.loc[~(
|
|
161
170
|
real_time_quotes_all_stocks_df['symbol'].isin(stock_em_zt_pool_df_data['symbol']))]
|
|
171
|
+
miss_zt_data_df = miss_zt_data_df_copy.copy()
|
|
162
172
|
if data_frame_util.is_not_empty(miss_zt_data_df):
|
|
163
173
|
miss_zt_data_df['buy_1_num'] = miss_zt_data_df['buy_1_num'].astype(float)
|
|
164
174
|
miss_zt_data_df['now_price'] = miss_zt_data_df['now_price'].astype(float)
|
|
165
175
|
miss_zt_data_df['closure_funds'] = round(miss_zt_data_df['buy_1_num'] * 100 * miss_zt_data_df['now_price'],
|
|
166
176
|
2)
|
|
177
|
+
|
|
178
|
+
company_info_industry_df = company_common_service_api.get_company_info_name()
|
|
179
|
+
company_info_industry_df = company_info_industry_df.loc[
|
|
180
|
+
company_info_industry_df['_id'].isin(miss_zt_data_df['symbol'])]
|
|
181
|
+
|
|
182
|
+
company_info_industry_df = company_info_industry_df[['_id', 'industry', 'name']]
|
|
183
|
+
|
|
184
|
+
company_info_industry_df = company_info_industry_df.set_index(['_id'], drop=True)
|
|
185
|
+
miss_zt_data_df = miss_zt_data_df.set_index(['symbol'], drop=False)
|
|
186
|
+
|
|
187
|
+
miss_zt_data_df = pd.merge(miss_zt_data_df, company_info_industry_df, how='outer',
|
|
188
|
+
left_index=True, right_index=True)
|
|
189
|
+
|
|
167
190
|
miss_zt_data_df = miss_zt_data_df[[
|
|
168
191
|
'symbol',
|
|
169
192
|
'name',
|
|
@@ -186,27 +209,181 @@ def sync_miss_zt_data(stock_em_zt_pool_df_data, str_day):
|
|
|
186
209
|
|
|
187
210
|
stock_em_zt_pool_df_data = pd.concat([miss_zt_data_df, stock_em_zt_pool_df_data])
|
|
188
211
|
return stock_em_zt_pool_df_data
|
|
212
|
+
else:
|
|
213
|
+
return stock_em_zt_pool_df_data
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def handle_ths_em_diff_data(ths_zt_pool_df_data, stock_em_zt_pool_df_data):
|
|
217
|
+
if data_frame_util.is_empty(ths_zt_pool_df_data):
|
|
218
|
+
return stock_em_zt_pool_df_data
|
|
219
|
+
else:
|
|
220
|
+
diff_ths_zt_df = ths_zt_pool_df_data.loc[
|
|
221
|
+
~(ths_zt_pool_df_data['symbol'].isin(stock_em_zt_pool_df_data['symbol']))]
|
|
222
|
+
if data_frame_util.is_empty(diff_ths_zt_df):
|
|
223
|
+
return stock_em_zt_pool_df_data
|
|
224
|
+
else:
|
|
225
|
+
diff_ths_zt_df = diff_ths_zt_df[[
|
|
226
|
+
'symbol',
|
|
227
|
+
'name',
|
|
228
|
+
'chg',
|
|
229
|
+
'now_price',
|
|
230
|
+
# 'amount',
|
|
231
|
+
# 'flow_mv',
|
|
232
|
+
# 'total_mv',
|
|
233
|
+
# 'exchange',
|
|
234
|
+
'closure_funds',
|
|
235
|
+
'first_closure_time',
|
|
236
|
+
'last_closure_time',
|
|
237
|
+
'frying_plates_numbers',
|
|
238
|
+
'statistics',
|
|
239
|
+
'connected_boards_numbers'
|
|
240
|
+
|
|
241
|
+
]]
|
|
242
|
+
|
|
243
|
+
company_info_df = query_company_info_with_share()
|
|
244
|
+
company_info_df['symbol'] = company_info_df['_id']
|
|
245
|
+
company_info_df = company_info_df.loc[company_info_df['symbol'].isin(list(diff_ths_zt_df['symbol']))]
|
|
246
|
+
|
|
247
|
+
company_info_df = common_service_fun_api.add_after_prefix(company_info_df)
|
|
248
|
+
|
|
249
|
+
symbol_prefix_list = list(company_info_df['symbol_prefix'])
|
|
250
|
+
real_time_quotes_list = deal_service_api.get_qmt_real_time_quotes_detail('qmt',
|
|
251
|
+
symbol_prefix_list)
|
|
252
|
+
|
|
253
|
+
real_time_quotes_df = pd.DataFrame(real_time_quotes_list)
|
|
254
|
+
|
|
255
|
+
real_time_quotes_df['symbol'] = real_time_quotes_df['symbol'].str.slice(0, 6)
|
|
256
|
+
company_info_df = company_info_df.set_index(['symbol'], drop=True)
|
|
257
|
+
real_time_quotes_df = real_time_quotes_df.set_index(['symbol'], drop=False)
|
|
258
|
+
|
|
259
|
+
real_time_quotes_df = pd.merge(company_info_df, real_time_quotes_df, how='outer',
|
|
260
|
+
left_index=True, right_index=True)
|
|
261
|
+
|
|
262
|
+
real_time_quotes_df['amount'] = round(real_time_quotes_df['amount'], 1)
|
|
263
|
+
|
|
264
|
+
real_time_quotes_df['total_mv'] = round(
|
|
265
|
+
real_time_quotes_df['lastPrice'] * real_time_quotes_df['total_share'], 1)
|
|
266
|
+
real_time_quotes_df['flow_mv'] = round(real_time_quotes_df['lastPrice'] * real_time_quotes_df['flow_share'],
|
|
267
|
+
1)
|
|
268
|
+
real_time_quotes_df['exchange'] = round(
|
|
269
|
+
real_time_quotes_df['amount'] * 100 / real_time_quotes_df['flow_mv'], 1)
|
|
270
|
+
|
|
271
|
+
real_time_quotes_df = real_time_quotes_df[
|
|
272
|
+
['symbol', 'amount', 'total_mv', 'flow_mv', 'exchange', 'industry']]
|
|
273
|
+
|
|
274
|
+
real_time_quotes_df = real_time_quotes_df.set_index(['symbol'], drop=True)
|
|
275
|
+
diff_ths_zt_df = diff_ths_zt_df.set_index(['symbol'], drop=False)
|
|
276
|
+
diff_ths_zt_df = pd.merge(real_time_quotes_df, diff_ths_zt_df, how='outer',
|
|
277
|
+
left_index=True, right_index=True)
|
|
278
|
+
|
|
279
|
+
diff_ths_zt_df = diff_ths_zt_df[[
|
|
280
|
+
'symbol',
|
|
281
|
+
'name',
|
|
282
|
+
'chg',
|
|
283
|
+
'now_price',
|
|
284
|
+
'amount',
|
|
285
|
+
'flow_mv',
|
|
286
|
+
'total_mv',
|
|
287
|
+
'exchange',
|
|
288
|
+
'closure_funds',
|
|
289
|
+
'first_closure_time',
|
|
290
|
+
'last_closure_time',
|
|
291
|
+
'frying_plates_numbers',
|
|
292
|
+
'statistics',
|
|
293
|
+
'connected_boards_numbers',
|
|
294
|
+
'industry'
|
|
295
|
+
|
|
296
|
+
]]
|
|
297
|
+
|
|
298
|
+
exist_number = stock_em_zt_pool_df_data.shape[0] + 1
|
|
299
|
+
|
|
300
|
+
diff_ths_zt_df.index = range(exist_number, exist_number + len(diff_ths_zt_df))
|
|
301
|
+
diff_ths_zt_df['index'] = diff_ths_zt_df.index
|
|
302
|
+
|
|
303
|
+
stock_em_zt_pool_df_data = pd.concat([stock_em_zt_pool_df_data, diff_ths_zt_df])
|
|
304
|
+
return stock_em_zt_pool_df_data
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def query_company_info_with_share():
|
|
308
|
+
query_field = {"_id": 1,
|
|
309
|
+
"industry": 1,
|
|
310
|
+
"company_type": 1,
|
|
311
|
+
"ths_industry_code": 1,
|
|
312
|
+
"ths_concept_name": 1,
|
|
313
|
+
"ths_concept_code": 1,
|
|
314
|
+
"ths_concept_sync_day": 1,
|
|
315
|
+
"first_sw_industry": 1,
|
|
316
|
+
"second_sw_industry": 1,
|
|
317
|
+
"second_industry_code": 1,
|
|
318
|
+
"third_sw_industry": 1,
|
|
319
|
+
"mv_circulation_ratio": 1,
|
|
320
|
+
"list_date": 1,
|
|
321
|
+
"diff_days": 1,
|
|
322
|
+
'em_industry': 1,
|
|
323
|
+
'operate_profit': 1,
|
|
324
|
+
'total_operate_income': 1,
|
|
325
|
+
"name": 1,
|
|
326
|
+
'pb': 1,
|
|
327
|
+
'pe_ttm': 1,
|
|
328
|
+
'ROE': 1,
|
|
329
|
+
'ths_industry_name': 1,
|
|
330
|
+
'total_share': 1,
|
|
331
|
+
'flow_share': 1
|
|
332
|
+
}
|
|
333
|
+
de_list_company_symbols = company_common_service_new_api.get_de_list_company()
|
|
334
|
+
query_field_key = str(query_field)
|
|
335
|
+
query = {"_id": {"$regex": "^[^48]"},
|
|
336
|
+
'symbol': {"$nin": de_list_company_symbols}, }
|
|
337
|
+
query_key = str(query)
|
|
338
|
+
company_info_df = company_common_service_new_api.get_company_info_by_field(query_key, query_field_key)
|
|
339
|
+
|
|
340
|
+
return company_info_df
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
# 异步更新涨停分析和数据
|
|
344
|
+
@async_fun
|
|
345
|
+
def update_zt_reason_analysis(stock_em_zt_pool_df_data, str_day):
|
|
346
|
+
if data_frame_util.is_empty(stock_em_zt_pool_df_data):
|
|
347
|
+
return
|
|
348
|
+
now_date = datetime.now()
|
|
349
|
+
now_str_day = now_date.strftime('%Y-%m-%d')
|
|
350
|
+
if now_str_day != str_day:
|
|
351
|
+
return
|
|
352
|
+
|
|
353
|
+
stock_em_zt_pool_df_data['str_day'] = str_day
|
|
354
|
+
main_line_zt_reason_service.update_symbol_list_zt_reason_analysis(stock_em_zt_pool_df_data, True)
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
# 保存连板股票主线
|
|
358
|
+
@async_fun
|
|
359
|
+
def save_last_trade_day_main_line(str_day, stock_em_zt_pool_df_data):
|
|
360
|
+
last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
|
|
361
|
+
stock_em_zt_pool_connected_df = stock_em_zt_pool_df_data.loc[
|
|
362
|
+
stock_em_zt_pool_df_data['connected_boards_numbers'] > 1]
|
|
363
|
+
if data_frame_util.is_empty(stock_em_zt_pool_connected_df):
|
|
364
|
+
return
|
|
365
|
+
else:
|
|
366
|
+
query = {'str_day': last_trade_day, 'symbol': {"$in": list(stock_em_zt_pool_connected_df['symbol'])}}
|
|
367
|
+
last_trade_day_main_line_detail_df = mongodb_util.find_query_data(db_name_constant.MAIN_LINE_DETAIL, query)
|
|
368
|
+
if data_frame_util.is_empty(last_trade_day_main_line_detail_df):
|
|
369
|
+
return
|
|
370
|
+
else:
|
|
371
|
+
last_trade_day_main_line_detail_df['_id'] = last_trade_day_main_line_detail_df['symbol'] + '_' + str_day
|
|
372
|
+
last_trade_day_main_line_detail_df['str_day'] = str_day
|
|
373
|
+
last_trade_day_main_line_detail_df['connected_boards_numbers'] = last_trade_day_main_line_detail_df[
|
|
374
|
+
'connected_boards_numbers'] + 1
|
|
375
|
+
now_date = datetime.now()
|
|
376
|
+
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
377
|
+
last_trade_day_main_line_detail_df['update_time'] = str_now_date
|
|
378
|
+
today_exist_main_line_df = mongodb_util.find_query_data(db_name_constant.MAIN_LINE_DETAIL,
|
|
379
|
+
{'str_day': str_day})
|
|
380
|
+
if data_frame_util.is_not_empty(today_exist_main_line_df):
|
|
381
|
+
today_new_main_line_df = last_trade_day_main_line_detail_df.loc[
|
|
382
|
+
last_trade_day_main_line_detail_df['symbol'].isin(list(today_exist_main_line_df['symbol']))]
|
|
383
|
+
else:
|
|
384
|
+
today_new_main_line_df = last_trade_day_main_line_detail_df.copy()
|
|
385
|
+
mongodb_util.save_mongo(today_new_main_line_df, db_name_constant.MAIN_LINE_DETAIL)
|
|
189
386
|
|
|
190
387
|
|
|
191
388
|
if __name__ == '__main__':
|
|
192
|
-
save_zt_info('
|
|
193
|
-
# from datetime import datetime
|
|
194
|
-
#
|
|
195
|
-
# if __name__ == '__main__':
|
|
196
|
-
#
|
|
197
|
-
# sync_date = date_handle_util.add_date_day('20240110', 0)
|
|
198
|
-
#
|
|
199
|
-
# now_date = datetime.now()
|
|
200
|
-
#
|
|
201
|
-
# str_now_day = sync_date.strftime('%Y-%m-%d')
|
|
202
|
-
#
|
|
203
|
-
# while now_date > sync_date:
|
|
204
|
-
# try:
|
|
205
|
-
# save_zt_info(str_now_day)
|
|
206
|
-
# sync_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_now_day), 1)
|
|
207
|
-
# print(str_now_day)
|
|
208
|
-
# str_now_day = sync_date.strftime('%Y-%m-%d')
|
|
209
|
-
#
|
|
210
|
-
# except BaseException as e:
|
|
211
|
-
# sync_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_now_day), 1)
|
|
212
|
-
# str_now_day = sync_date.strftime('%Y-%m-%d')
|
|
389
|
+
save_zt_info('2025-12-26')
|
|
@@ -9,15 +9,13 @@ import mns_common.api.ths.zt.ths_stock_zt_pool_api as ths_stock_zt_pool_api
|
|
|
9
9
|
from datetime import datetime
|
|
10
10
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
11
11
|
import pandas as pd
|
|
12
|
-
import mns_common.api.em.east_money_stock_api as east_money_stock_api
|
|
13
12
|
import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
|
|
14
13
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
15
14
|
from loguru import logger
|
|
16
|
-
import mns_common.api.akshare.k_line_api as k_line_api
|
|
17
15
|
import mns_common.utils.date_handle_util as date_handle_util
|
|
18
16
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
19
17
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
20
|
-
import
|
|
18
|
+
import mns_scheduler.k_line.common.k_line_common_api as k_line_common_api
|
|
21
19
|
|
|
22
20
|
mongodb_util = MongodbUtil('27017')
|
|
23
21
|
|
|
@@ -32,56 +30,14 @@ def ths_zt_pool(str_day, real_time_quotes_all_stocks):
|
|
|
32
30
|
now_date = datetime.now()
|
|
33
31
|
now_day_str_day = now_date.strftime('%Y-%m-%d')
|
|
34
32
|
ths_zt_pool_df = ths_stock_zt_pool_api.get_zt_reason(str_day)
|
|
35
|
-
|
|
33
|
+
ths_zt_pool_df_copy = ths_zt_pool_df.copy()
|
|
34
|
+
|
|
35
|
+
if data_frame_util.is_empty(ths_zt_pool_df_copy):
|
|
36
36
|
return pd.DataFrame()
|
|
37
37
|
if str_day == now_day_str_day:
|
|
38
|
-
ths_zt_pool_df =
|
|
38
|
+
ths_zt_pool_df = merge_his_day_zt_info(ths_zt_pool_df_copy, str_day)
|
|
39
39
|
else:
|
|
40
|
-
ths_zt_pool_df = merge_his_day_zt_info(
|
|
41
|
-
|
|
42
|
-
return ths_zt_pool_df
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def merge_now_day_zt_info(ths_zt_pool_df, real_time_quotes_all_stocks):
|
|
46
|
-
if real_time_quotes_all_stocks is None:
|
|
47
|
-
real_time_quotes_all_stocks = east_money_stock_api.get_real_time_quotes_all_stocks()
|
|
48
|
-
real_time_quotes_all_stocks = real_time_quotes_all_stocks[['symbol', 'amount',
|
|
49
|
-
'exchange', 'flow_mv', 'total_mv']]
|
|
50
|
-
real_time_quotes_all_stocks_zt = real_time_quotes_all_stocks.loc[
|
|
51
|
-
real_time_quotes_all_stocks['symbol'].isin(ths_zt_pool_df['symbol'])]
|
|
52
|
-
|
|
53
|
-
query_field = {
|
|
54
|
-
"ths_concept_name": 1,
|
|
55
|
-
"ths_concept_code": 1,
|
|
56
|
-
"ths_concept_sync_day": 1,
|
|
57
|
-
"company_type": 1,
|
|
58
|
-
"concept_create_day": 1,
|
|
59
|
-
"first_sw_industry": 1,
|
|
60
|
-
"third_sw_industry": 1,
|
|
61
|
-
"industry": 1,
|
|
62
|
-
"list_date": 1,
|
|
63
|
-
}
|
|
64
|
-
query_field_key = str(query_field)
|
|
65
|
-
query_key = str({'symbol': {"$in": list(ths_zt_pool_df['symbol'])}})
|
|
66
|
-
company_df_zt = company_common_service_new_api.get_company_info_by_field(query_key, query_field_key)
|
|
67
|
-
|
|
68
|
-
company_df_zt = company_df_zt.set_index(['_id'], drop=True)
|
|
69
|
-
real_time_quotes_all_stocks_zt = real_time_quotes_all_stocks_zt.set_index(['symbol'], drop=True)
|
|
70
|
-
ths_zt_pool_df = ths_zt_pool_df.set_index(['symbol'], drop=False)
|
|
71
|
-
|
|
72
|
-
ths_zt_pool_df = pd.merge(ths_zt_pool_df, company_df_zt, how='outer',
|
|
73
|
-
left_index=True, right_index=True)
|
|
74
|
-
|
|
75
|
-
ths_zt_pool_df = pd.merge(ths_zt_pool_df, real_time_quotes_all_stocks_zt, how='outer',
|
|
76
|
-
left_index=True, right_index=True)
|
|
77
|
-
ths_zt_pool_df['amount_level'] = round(ths_zt_pool_df['amount'] / common_service_fun_api.HUNDRED_MILLION, 2)
|
|
78
|
-
ths_zt_pool_df = common_service_fun_api.classify_symbol(ths_zt_pool_df)
|
|
79
|
-
ths_zt_pool_df = common_service_fun_api.total_mv_classification(ths_zt_pool_df)
|
|
80
|
-
ths_zt_pool_df.fillna('', inplace=True)
|
|
81
|
-
if 'zt_flag' in ths_zt_pool_df.columns:
|
|
82
|
-
del ths_zt_pool_df['zt_flag']
|
|
83
|
-
if 'zt_tag' in ths_zt_pool_df.columns:
|
|
84
|
-
del ths_zt_pool_df['zt_tag']
|
|
40
|
+
ths_zt_pool_df = merge_his_day_zt_info(ths_zt_pool_df_copy, str_day)
|
|
85
41
|
|
|
86
42
|
return ths_zt_pool_df
|
|
87
43
|
|
|
@@ -142,35 +98,37 @@ def merge_his_day_zt_info(ths_zt_pool_df, str_day):
|
|
|
142
98
|
def get_bfq_daily_line(ths_zt_pool_df, str_day):
|
|
143
99
|
query_k_line = {'symbol': {"$in": list(ths_zt_pool_df['symbol'])}, 'date': date_handle_util.no_slash_date(str_day)}
|
|
144
100
|
bfq_daily_line_df = mongodb_util.find_query_data('stock_bfq_daily', query_k_line)
|
|
145
|
-
if
|
|
101
|
+
if bfq_daily_line_df.shape[0] >= ths_zt_pool_df.shape[0]:
|
|
146
102
|
bfq_daily_line_df = bfq_daily_line_df[['amount', 'chg', 'close', 'exchange',
|
|
147
103
|
'symbol', 'amount_level',
|
|
148
104
|
'flow_mv', 'flow_mv_sp'
|
|
149
105
|
]]
|
|
150
106
|
bfq_daily_line_df = bfq_daily_line_df.rename(columns={"close": 'now_price'})
|
|
151
107
|
return bfq_daily_line_df
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
try:
|
|
108
|
+
else:
|
|
109
|
+
bfq_k_line_result_df = pd.DataFrame()
|
|
110
|
+
for zt_one in ths_zt_pool_df.itertuples():
|
|
156
111
|
symbol = zt_one.symbol
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
112
|
+
try:
|
|
113
|
+
|
|
114
|
+
bfq_daily_line_df = k_line_common_api.get_k_line_common_adapter(symbol, 'daily', '', str_day)
|
|
115
|
+
|
|
116
|
+
if data_frame_util.is_empty(bfq_daily_line_df):
|
|
117
|
+
continue
|
|
118
|
+
|
|
119
|
+
bfq_daily_line_df_one = bfq_daily_line_df.loc[
|
|
120
|
+
bfq_daily_line_df['date'] == date_handle_util.no_slash_date(str_day)]
|
|
121
|
+
|
|
122
|
+
bfq_daily_line_df_one = bfq_daily_line_df_one[['amount', 'chg', 'close', 'exchange',
|
|
123
|
+
'symbol', 'amount_level',
|
|
124
|
+
'flow_mv', 'flow_mv_sp'
|
|
125
|
+
]]
|
|
126
|
+
bfq_daily_line_df_one = bfq_daily_line_df_one.rename(columns={"close": 'now_price'})
|
|
127
|
+
bfq_k_line_result_df = pd.concat([bfq_k_line_result_df, bfq_daily_line_df_one])
|
|
128
|
+
except BaseException as e:
|
|
129
|
+
logger.warning("同步不复权k线异常:{},{}", symbol, e)
|
|
130
|
+
|
|
131
|
+
return bfq_k_line_result_df
|
|
174
132
|
|
|
175
133
|
|
|
176
134
|
def save_ths_zt_pool(ths_zt_pool_df, str_day):
|
|
@@ -230,21 +188,6 @@ if __name__ == '__main__':
|
|
|
230
188
|
# trade_date = '2024-08-01'
|
|
231
189
|
# zt_df = ths_zt_pool(trade_date, None)
|
|
232
190
|
# save_ths_zt_pool(zt_df, trade_date)
|
|
233
|
-
trade_date = '
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
query = {"$and": [{'_id': {"$gte": '2013-07-04'}}, {'_id': {"$lte": '2015-04-30'}}]}
|
|
237
|
-
# query = {"$and": [{'_id': {"$gte": '2024-07-24'}}, {'_id': {"$lte": '2024-08-01'}}]}
|
|
238
|
-
trade_date_list = mongodb_util.find_query_data('trade_date_list', query)
|
|
239
|
-
trade_date_list = trade_date_list.sort_values(by=['trade_date'], ascending=False)
|
|
240
|
-
for trade_one in trade_date_list.itertuples():
|
|
241
|
-
try:
|
|
242
|
-
trade_date = trade_one.trade_date
|
|
243
|
-
zt_df = ths_zt_pool(trade_date, None)
|
|
244
|
-
|
|
245
|
-
# zt_df = mongodb_util.find_query_data(db_name_constant.THS_ZT_POOL, query={"str_day": trade_date})
|
|
246
|
-
save_ths_zt_pool(zt_df, trade_date)
|
|
247
|
-
logger.info("同步到日期:{}", trade_date)
|
|
248
|
-
time.sleep(2)
|
|
249
|
-
except BaseException as e:
|
|
250
|
-
logger.warning("同步涨停到日期:{},{}", trade_one.trade_date, e)
|
|
191
|
+
trade_date = '2025-11-04'
|
|
192
|
+
ths_zt_pool_df_test = ths_zt_pool(trade_date, None)
|
|
193
|
+
save_ths_zt_pool(ths_zt_pool_df_test, trade_date)
|