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,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.date_handle_util as date_handle_util
|
|
@@ -36,4 +36,4 @@ def sync_his_zt_pool_data(begin_day, end_day):
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
if __name__ == '__main__':
|
|
39
|
-
sync_high_chg_pool_service.sync_stock_high_chg_pool_list('
|
|
39
|
+
sync_high_chg_pool_service.sync_stock_high_chg_pool_list('2025-05-23', None)
|
|
@@ -2,12 +2,12 @@ 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
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
10
|
-
import mns_scheduler.k_line.
|
|
10
|
+
import mns_scheduler.k_line.month_week_daily.daily_week_month_line_sync as daily_week_month_line_sync
|
|
11
11
|
from datetime import datetime
|
|
12
12
|
import mns_scheduler.zt.zt_pool.em_zt_pool_sync_api as em_zt_pool_sync_api
|
|
13
13
|
import mns_scheduler.zt.high_chg.sync_high_chg_pool_service as sync_high_chg_pool_service
|
|
@@ -16,16 +16,17 @@ import mns_scheduler.zt.high_chg.sync_high_chg_real_time_quotes_service as sync_
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
def sync_now_day_high_chg():
|
|
19
|
-
real_time_quotes_now_es =
|
|
19
|
+
real_time_quotes_now_es = em_stock_info_api.get_a_stock_info()
|
|
20
20
|
real_time_quotes_now_es_high_chg = real_time_quotes_now_es.loc[
|
|
21
21
|
real_time_quotes_now_es['chg'] > common_service_fun_api.ZT_CHG]
|
|
22
|
+
now_date = datetime.now()
|
|
23
|
+
|
|
24
|
+
str_now_day = now_date.strftime('%Y-%m-%d')
|
|
22
25
|
# 同步qfq k线
|
|
23
|
-
daily_week_month_line_sync.sync_all_daily_data('daily', 'qfq', 'stock_qfq_daily',
|
|
26
|
+
daily_week_month_line_sync.sync_all_daily_data('daily', 'qfq', 'stock_qfq_daily', str_now_day,
|
|
24
27
|
list(real_time_quotes_now_es_high_chg['symbol']))
|
|
25
28
|
|
|
26
|
-
now_date = datetime.now()
|
|
27
29
|
|
|
28
|
-
str_now_day = now_date.strftime('%Y-%m-%d')
|
|
29
30
|
# 同步当前涨停
|
|
30
31
|
em_zt_pool_sync_api.save_zt_info(str_now_day)
|
|
31
32
|
|
|
@@ -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,12 @@ 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.api.ths.zt.ths_stock_zt_pool_api as ths_stock_zt_pool_api
|
|
22
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
23
|
+
import mns_common.component.deal.deal_service_api as deal_service_api
|
|
24
|
+
import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
|
|
22
25
|
|
|
23
26
|
'''
|
|
24
27
|
东方财富涨停池
|
|
@@ -28,7 +31,7 @@ mongodb_util = MongodbUtil('27017')
|
|
|
28
31
|
|
|
29
32
|
ZT_FIELD = ['_id', 'symbol', 'name', 'now_price', 'chg', 'first_closure_time',
|
|
30
33
|
'last_closure_time', 'connected_boards_numbers',
|
|
31
|
-
'zt_reason', 'closure_funds',
|
|
34
|
+
'zt_reason', 'zt_analysis', 'closure_funds',
|
|
32
35
|
# 'closure_funds_per_amount', 'closure_funds_per_flow_mv',
|
|
33
36
|
'frying_plates_numbers',
|
|
34
37
|
# 'statistics_detail', 'zt_type', 'market_code',
|
|
@@ -39,63 +42,48 @@ ZT_FIELD = ['_id', 'symbol', 'name', 'now_price', 'chg', 'first_closure_time',
|
|
|
39
42
|
'third_sw_industry', 'ths_concept_name',
|
|
40
43
|
'ths_concept_code', 'ths_concept_sync_day', 'em_industry',
|
|
41
44
|
'mv_circulation_ratio', 'ths_concept_list_info', 'kpl_plate_name',
|
|
42
|
-
'kpl_plate_list_info', 'company_type', 'diff_days', '
|
|
45
|
+
'kpl_plate_list_info', 'company_type', 'diff_days', 'amount',
|
|
43
46
|
'list_date',
|
|
44
47
|
'exchange', 'flow_mv', 'total_mv',
|
|
45
48
|
'classification', 'flow_mv_sp', 'total_mv_sp', 'flow_mv_level',
|
|
46
|
-
'amount_level', 'new_stock', 'list_date_01', 'index', 'str_day']
|
|
49
|
+
'amount_level', 'new_stock', 'list_date_01', 'index', 'str_day', 'main_line', 'sub_main_line']
|
|
47
50
|
|
|
48
51
|
|
|
49
52
|
def save_zt_info(str_day):
|
|
50
53
|
if bool(1 - trade_date_common_service_api.is_trade_day(str_day)):
|
|
51
|
-
return
|
|
54
|
+
return pd.DataFrame()
|
|
52
55
|
|
|
53
56
|
stock_em_zt_pool_df_data = stock_zt_pool_api.stock_em_zt_pool_df(
|
|
54
57
|
date_handle_util.no_slash_date(str_day))
|
|
55
58
|
|
|
56
59
|
# fix 涨停池没有的股票
|
|
57
|
-
stock_em_zt_pool_df_data =
|
|
60
|
+
stock_em_zt_pool_df_data = handle_miss_zt_data(stock_em_zt_pool_df_data.copy(), str_day)
|
|
58
61
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
try:
|
|
63
|
+
# 同花顺问财涨停池
|
|
64
|
+
ths_zt_pool_df_data = ths_stock_zt_pool_v2_api.get_ths_stock_zt_reason_with_cache(str_day)
|
|
65
|
+
except BaseException as e:
|
|
66
|
+
logger.error("同步ths涨停数据异常")
|
|
67
|
+
ths_zt_pool_df_data = pd.DataFrame()
|
|
62
68
|
|
|
63
|
-
stock_em_zt_pool_df_data =
|
|
69
|
+
stock_em_zt_pool_df_data = handle_ths_em_diff_data(ths_zt_pool_df_data, stock_em_zt_pool_df_data)
|
|
64
70
|
|
|
65
|
-
stock_em_zt_pool_df_data =
|
|
71
|
+
stock_em_zt_pool_df_data = common_service_fun_api.total_mv_classification(stock_em_zt_pool_df_data.copy())
|
|
66
72
|
|
|
67
|
-
|
|
68
|
-
last_trade_day_zt_df = zt_common_service_api.get_last_trade_day_zt(str_day)
|
|
73
|
+
stock_em_zt_pool_df_data = common_service_fun_api.classify_symbol(stock_em_zt_pool_df_data.copy())
|
|
69
74
|
|
|
70
|
-
|
|
71
|
-
# 同花顺问财涨停池
|
|
72
|
-
ths_zt_pool_df_data = ths_stock_zt_pool_v2_api.get_ths_stock_zt_reason_with_cache(str_day)
|
|
75
|
+
stock_em_zt_pool_df_data = common_service_fun_api.symbol_amount_simple(stock_em_zt_pool_df_data.copy())
|
|
73
76
|
|
|
74
|
-
|
|
75
|
-
# del stock_em_zt_pool_df_data['ths_concept_code']
|
|
77
|
+
stock_em_zt_pool_df_data = company_common_service_api.amendment_industry(stock_em_zt_pool_df_data.copy())
|
|
76
78
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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)
|
|
79
|
+
# 主线标记 复盘用
|
|
80
|
+
stock_em_zt_pool_df_data['main_line'] = '无'
|
|
81
|
+
stock_em_zt_pool_df_data['sub_main_line'] = '无'
|
|
85
82
|
|
|
86
|
-
|
|
87
|
-
|
|
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)
|
|
83
|
+
# 上个交易交易日涨停股票
|
|
84
|
+
last_trade_day_zt_df = zt_common_service_api.get_last_trade_day_zt(str_day)
|
|
98
85
|
|
|
86
|
+
stock_em_zt_pool_df_data['first_closure_time'] = stock_em_zt_pool_df_data['first_closure_time'].str.strip()
|
|
99
87
|
stock_em_zt_pool_df_data['list_date'] = stock_em_zt_pool_df_data['list_date'].apply(
|
|
100
88
|
lambda x: pd.to_numeric(x, errors="coerce"))
|
|
101
89
|
|
|
@@ -119,51 +107,135 @@ def save_zt_info(str_day):
|
|
|
119
107
|
|
|
120
108
|
stock_em_zt_pool_df_data['str_day'] = str_day
|
|
121
109
|
stock_em_zt_pool_df_data['_id'] = stock_em_zt_pool_df_data['symbol'] + "_" + str_day
|
|
110
|
+
stock_em_zt_pool_df_data.drop_duplicates('symbol', keep='last', inplace=True)
|
|
122
111
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
112
|
+
query_today_zt = {'str_day': str_day}
|
|
113
|
+
|
|
114
|
+
stock_today_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query_today_zt)
|
|
115
|
+
|
|
116
|
+
if data_frame_util.is_empty(stock_today_zt_pool_df):
|
|
117
|
+
|
|
118
|
+
today_new_zt_pool_df = stock_em_zt_pool_df_data.copy()
|
|
127
119
|
else:
|
|
128
|
-
|
|
120
|
+
today_new_zt_pool_df = stock_em_zt_pool_df_data.loc[
|
|
121
|
+
~stock_em_zt_pool_df_data['symbol'].isin(stock_today_zt_pool_df['symbol'])]
|
|
122
|
+
|
|
123
|
+
try:
|
|
124
|
+
|
|
125
|
+
today_main_line_df = mongodb_util.find_query_data(db_name_constant.MAIN_LINE_DETAIL, {'str_day': str_day})
|
|
126
|
+
|
|
127
|
+
for stock_one in today_new_zt_pool_df.itertuples():
|
|
128
|
+
try:
|
|
129
|
+
|
|
130
|
+
# 设置连板数目
|
|
131
|
+
stock_em_zt_pool_df_data = set_connected_boards_numbers(stock_em_zt_pool_df_data.copy(),
|
|
132
|
+
stock_one.symbol,
|
|
133
|
+
last_trade_day_zt_df.copy())
|
|
134
|
+
|
|
135
|
+
# 涨停分析
|
|
136
|
+
zt_result_dict = ths_stock_zt_pool_api.zt_analyse_reason(stock_one.symbol)
|
|
137
|
+
zt_analysis = zt_result_dict['zt_analyse_detail']
|
|
138
|
+
zt_reason = zt_result_dict['zt_reason']
|
|
139
|
+
|
|
140
|
+
stock_em_zt_pool_df_data.loc[
|
|
141
|
+
stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'zt_reason'] = zt_reason
|
|
142
|
+
|
|
143
|
+
stock_em_zt_pool_df_data.loc[
|
|
144
|
+
stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'zt_analysis'] = zt_analysis
|
|
145
|
+
|
|
146
|
+
today_main_line_one_df = today_main_line_df.loc[today_main_line_df['symbol'] == stock_one.symbol]
|
|
147
|
+
if data_frame_util.is_not_empty(today_main_line_one_df):
|
|
148
|
+
stock_em_zt_pool_df_data.loc[
|
|
149
|
+
stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'main_line'] = \
|
|
150
|
+
list(today_main_line_one_df['main_line'])[0]
|
|
151
|
+
|
|
152
|
+
stock_em_zt_pool_df_data.loc[
|
|
153
|
+
stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'sub_main_line'] = \
|
|
154
|
+
list(today_main_line_one_df['sub_main_line'])[0]
|
|
155
|
+
|
|
156
|
+
query_exist = {'symbol': stock_one.symbol, 'str_day': str_day}
|
|
157
|
+
if mongodb_util.exist_data_query(db_name_constant.STOCK_ZT_POOL, query_exist):
|
|
158
|
+
continue
|
|
159
|
+
else:
|
|
160
|
+
|
|
161
|
+
stock_em_zt_pool_df_data_one = stock_em_zt_pool_df_data.loc[
|
|
162
|
+
stock_em_zt_pool_df_data['symbol'] == stock_one.symbol]
|
|
163
|
+
stock_em_zt_pool_df_data_one = stock_em_zt_pool_df_data_one[ZT_FIELD]
|
|
164
|
+
|
|
165
|
+
chg = round(float(list(stock_em_zt_pool_df_data_one['chg'])[0]), 2)
|
|
166
|
+
stock_em_zt_pool_df_data_one['chg'] = chg
|
|
167
|
+
|
|
168
|
+
mongodb_util.save_mongo(stock_em_zt_pool_df_data_one, db_name_constant.STOCK_ZT_POOL)
|
|
169
|
+
|
|
170
|
+
except BaseException as e:
|
|
171
|
+
stock_em_zt_pool_df_data['zt_reason'] = '0'
|
|
172
|
+
logger.error("同步涨停信息出现异常:{},{}", stock_one.symbol, e)
|
|
173
|
+
except BaseException as e:
|
|
174
|
+
stock_em_zt_pool_df_data['zt_reason'] = '0'
|
|
175
|
+
logger.error("出现异常:{}", e)
|
|
129
176
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
stock_em_zt_pool_df_data['symbol'].isin(exist_zt_pool_today_not_nan['symbol']))]
|
|
133
|
-
if data_frame_util.is_not_empty(stock_em_zt_pool_df_data_new):
|
|
134
|
-
mongodb_util.save_mongo(stock_em_zt_pool_df_data_new, 'stock_zt_pool')
|
|
177
|
+
stock_em_zt_pool_df_data = pd.concat([stock_today_zt_pool_df, today_new_zt_pool_df])
|
|
178
|
+
stock_em_zt_pool_df_data = stock_em_zt_pool_df_data[ZT_FIELD]
|
|
135
179
|
return stock_em_zt_pool_df_data
|
|
136
180
|
|
|
137
181
|
|
|
138
182
|
# 设置连板数目
|
|
139
183
|
def set_connected_boards_numbers(stock_em_zt_pool_df_data, symbol, last_trade_day_zt_df):
|
|
140
|
-
|
|
184
|
+
# 连板股票
|
|
185
|
+
connected_boards_df_copy = last_trade_day_zt_df.loc[
|
|
141
186
|
last_trade_day_zt_df['symbol'].isin(stock_em_zt_pool_df_data['symbol'])]
|
|
142
187
|
|
|
188
|
+
connected_boards_df = connected_boards_df_copy.copy()
|
|
143
189
|
connected_boards_df['connected_boards_numbers'] = connected_boards_df['connected_boards_numbers'] + 1
|
|
144
190
|
|
|
191
|
+
# 连板股票
|
|
145
192
|
connected_boards_df_one = connected_boards_df.loc[connected_boards_df['symbol'] == symbol]
|
|
193
|
+
|
|
146
194
|
if data_frame_util.is_not_empty(connected_boards_df_one):
|
|
147
|
-
|
|
195
|
+
stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'connected_boards_numbers'] = \
|
|
148
196
|
list(connected_boards_df_one['connected_boards_numbers'])[0]
|
|
149
197
|
|
|
198
|
+
if 'main_line' in connected_boards_df_one.columns:
|
|
199
|
+
stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'main_line'] = \
|
|
200
|
+
list(connected_boards_df_one['main_line'])[0]
|
|
201
|
+
|
|
202
|
+
if 'sub_main_line' in connected_boards_df_one.columns:
|
|
203
|
+
stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'sub_main_line'] = \
|
|
204
|
+
list(connected_boards_df_one['sub_main_line'])[0]
|
|
205
|
+
|
|
150
206
|
return stock_em_zt_pool_df_data
|
|
151
207
|
|
|
152
208
|
|
|
153
|
-
def
|
|
209
|
+
def handle_miss_zt_data(stock_em_zt_pool_df_data, str_day):
|
|
154
210
|
now_date = datetime.now()
|
|
155
211
|
now_day = now_date.strftime('%Y-%m-%d')
|
|
156
212
|
if now_day == str_day:
|
|
157
|
-
real_time_quotes_all_stocks_df =
|
|
213
|
+
real_time_quotes_all_stocks_df = em_real_time_quotes_api.get_real_time_quotes_now(None, None)
|
|
214
|
+
if data_frame_util.is_empty(real_time_quotes_all_stocks_df):
|
|
215
|
+
return stock_em_zt_pool_df_data
|
|
158
216
|
real_time_quotes_all_stocks_df = real_time_quotes_all_stocks_df.loc[
|
|
159
217
|
(real_time_quotes_all_stocks_df['wei_bi'] == 100) & (real_time_quotes_all_stocks_df['chg'] >= 9)]
|
|
160
|
-
|
|
218
|
+
miss_zt_data_df_copy = real_time_quotes_all_stocks_df.loc[~(
|
|
161
219
|
real_time_quotes_all_stocks_df['symbol'].isin(stock_em_zt_pool_df_data['symbol']))]
|
|
220
|
+
miss_zt_data_df = miss_zt_data_df_copy.copy()
|
|
162
221
|
if data_frame_util.is_not_empty(miss_zt_data_df):
|
|
163
222
|
miss_zt_data_df['buy_1_num'] = miss_zt_data_df['buy_1_num'].astype(float)
|
|
164
223
|
miss_zt_data_df['now_price'] = miss_zt_data_df['now_price'].astype(float)
|
|
165
224
|
miss_zt_data_df['closure_funds'] = round(miss_zt_data_df['buy_1_num'] * 100 * miss_zt_data_df['now_price'],
|
|
166
225
|
2)
|
|
226
|
+
|
|
227
|
+
company_info_industry_df = company_common_service_api.get_company_info_name()
|
|
228
|
+
company_info_industry_df = company_info_industry_df.loc[
|
|
229
|
+
company_info_industry_df['_id'].isin(miss_zt_data_df['symbol'])]
|
|
230
|
+
|
|
231
|
+
company_info_industry_df = company_info_industry_df[['_id', 'industry', 'name']]
|
|
232
|
+
|
|
233
|
+
company_info_industry_df = company_info_industry_df.set_index(['_id'], drop=True)
|
|
234
|
+
miss_zt_data_df = miss_zt_data_df.set_index(['symbol'], drop=False)
|
|
235
|
+
|
|
236
|
+
miss_zt_data_df = pd.merge(miss_zt_data_df, company_info_industry_df, how='outer',
|
|
237
|
+
left_index=True, right_index=True)
|
|
238
|
+
|
|
167
239
|
miss_zt_data_df = miss_zt_data_df[[
|
|
168
240
|
'symbol',
|
|
169
241
|
'name',
|
|
@@ -186,10 +258,139 @@ def sync_miss_zt_data(stock_em_zt_pool_df_data, str_day):
|
|
|
186
258
|
|
|
187
259
|
stock_em_zt_pool_df_data = pd.concat([miss_zt_data_df, stock_em_zt_pool_df_data])
|
|
188
260
|
return stock_em_zt_pool_df_data
|
|
261
|
+
else:
|
|
262
|
+
return stock_em_zt_pool_df_data
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def handle_ths_em_diff_data(ths_zt_pool_df_data, stock_em_zt_pool_df_data):
|
|
266
|
+
if data_frame_util.is_empty(ths_zt_pool_df_data):
|
|
267
|
+
return stock_em_zt_pool_df_data
|
|
268
|
+
else:
|
|
269
|
+
diff_ths_zt_df = ths_zt_pool_df_data.loc[
|
|
270
|
+
~(ths_zt_pool_df_data['symbol'].isin(stock_em_zt_pool_df_data['symbol']))]
|
|
271
|
+
if data_frame_util.is_empty(diff_ths_zt_df):
|
|
272
|
+
return stock_em_zt_pool_df_data
|
|
273
|
+
else:
|
|
274
|
+
diff_ths_zt_df = diff_ths_zt_df[[
|
|
275
|
+
'symbol',
|
|
276
|
+
'name',
|
|
277
|
+
'chg',
|
|
278
|
+
'now_price',
|
|
279
|
+
# 'amount',
|
|
280
|
+
# 'flow_mv',
|
|
281
|
+
# 'total_mv',
|
|
282
|
+
# 'exchange',
|
|
283
|
+
'closure_funds',
|
|
284
|
+
'first_closure_time',
|
|
285
|
+
'last_closure_time',
|
|
286
|
+
'frying_plates_numbers',
|
|
287
|
+
'statistics',
|
|
288
|
+
'connected_boards_numbers'
|
|
289
|
+
|
|
290
|
+
]]
|
|
291
|
+
|
|
292
|
+
company_info_df = query_company_info_with_share()
|
|
293
|
+
company_info_df['symbol'] = company_info_df['_id']
|
|
294
|
+
company_info_df = company_info_df.loc[company_info_df['symbol'].isin(list(diff_ths_zt_df['symbol']))]
|
|
295
|
+
|
|
296
|
+
company_info_df = common_service_fun_api.add_after_prefix(company_info_df)
|
|
297
|
+
|
|
298
|
+
symbol_prefix_list = list(company_info_df['symbol_prefix'])
|
|
299
|
+
real_time_quotes_list = deal_service_api.get_qmt_real_time_quotes_detail('qmt',
|
|
300
|
+
symbol_prefix_list)
|
|
301
|
+
|
|
302
|
+
real_time_quotes_df = pd.DataFrame(real_time_quotes_list)
|
|
303
|
+
|
|
304
|
+
real_time_quotes_df['symbol'] = real_time_quotes_df['symbol'].str.slice(0, 6)
|
|
305
|
+
company_info_df = company_info_df.set_index(['symbol'], drop=True)
|
|
306
|
+
real_time_quotes_df = real_time_quotes_df.set_index(['symbol'], drop=False)
|
|
307
|
+
|
|
308
|
+
real_time_quotes_df = pd.merge(company_info_df, real_time_quotes_df, how='outer',
|
|
309
|
+
left_index=True, right_index=True)
|
|
310
|
+
|
|
311
|
+
real_time_quotes_df['amount'] = round(real_time_quotes_df['amount'], 1)
|
|
312
|
+
|
|
313
|
+
real_time_quotes_df['total_mv'] = round(
|
|
314
|
+
real_time_quotes_df['lastPrice'] * real_time_quotes_df['total_share'], 1)
|
|
315
|
+
real_time_quotes_df['flow_mv'] = round(real_time_quotes_df['lastPrice'] * real_time_quotes_df['flow_share'],
|
|
316
|
+
1)
|
|
317
|
+
real_time_quotes_df['exchange'] = round(
|
|
318
|
+
real_time_quotes_df['amount'] * 100 / real_time_quotes_df['flow_mv'], 1)
|
|
319
|
+
|
|
320
|
+
real_time_quotes_df = real_time_quotes_df[
|
|
321
|
+
['symbol', 'amount', 'total_mv', 'flow_mv', 'exchange', 'industry']]
|
|
322
|
+
|
|
323
|
+
real_time_quotes_df = real_time_quotes_df.set_index(['symbol'], drop=True)
|
|
324
|
+
diff_ths_zt_df = diff_ths_zt_df.set_index(['symbol'], drop=False)
|
|
325
|
+
diff_ths_zt_df = pd.merge(real_time_quotes_df, diff_ths_zt_df, how='outer',
|
|
326
|
+
left_index=True, right_index=True)
|
|
327
|
+
|
|
328
|
+
diff_ths_zt_df = diff_ths_zt_df[[
|
|
329
|
+
'symbol',
|
|
330
|
+
'name',
|
|
331
|
+
'chg',
|
|
332
|
+
'now_price',
|
|
333
|
+
'amount',
|
|
334
|
+
'flow_mv',
|
|
335
|
+
'total_mv',
|
|
336
|
+
'exchange',
|
|
337
|
+
'closure_funds',
|
|
338
|
+
'first_closure_time',
|
|
339
|
+
'last_closure_time',
|
|
340
|
+
'frying_plates_numbers',
|
|
341
|
+
'statistics',
|
|
342
|
+
'connected_boards_numbers',
|
|
343
|
+
'industry'
|
|
344
|
+
|
|
345
|
+
]]
|
|
346
|
+
|
|
347
|
+
exist_number = stock_em_zt_pool_df_data.shape[0] + 1
|
|
348
|
+
|
|
349
|
+
diff_ths_zt_df.index = range(exist_number, exist_number + len(diff_ths_zt_df))
|
|
350
|
+
diff_ths_zt_df['index'] = diff_ths_zt_df.index
|
|
351
|
+
|
|
352
|
+
stock_em_zt_pool_df_data = pd.concat([stock_em_zt_pool_df_data, diff_ths_zt_df])
|
|
353
|
+
return stock_em_zt_pool_df_data
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
def query_company_info_with_share():
|
|
357
|
+
query_field = {"_id": 1,
|
|
358
|
+
"industry": 1,
|
|
359
|
+
"company_type": 1,
|
|
360
|
+
"ths_industry_code": 1,
|
|
361
|
+
"ths_concept_name": 1,
|
|
362
|
+
"ths_concept_code": 1,
|
|
363
|
+
"ths_concept_sync_day": 1,
|
|
364
|
+
"first_sw_industry": 1,
|
|
365
|
+
"second_sw_industry": 1,
|
|
366
|
+
"second_industry_code": 1,
|
|
367
|
+
"third_sw_industry": 1,
|
|
368
|
+
"mv_circulation_ratio": 1,
|
|
369
|
+
"list_date": 1,
|
|
370
|
+
"diff_days": 1,
|
|
371
|
+
'em_industry': 1,
|
|
372
|
+
'operate_profit': 1,
|
|
373
|
+
'total_operate_income': 1,
|
|
374
|
+
"name": 1,
|
|
375
|
+
'pb': 1,
|
|
376
|
+
'pe_ttm': 1,
|
|
377
|
+
'ROE': 1,
|
|
378
|
+
'ths_industry_name': 1,
|
|
379
|
+
'total_share': 1,
|
|
380
|
+
'flow_share': 1
|
|
381
|
+
}
|
|
382
|
+
de_list_company_symbols = company_common_service_new_api.get_de_list_company()
|
|
383
|
+
query_field_key = str(query_field)
|
|
384
|
+
query = {"_id": {"$regex": "^[^48]"},
|
|
385
|
+
'symbol': {"$nin": de_list_company_symbols}, }
|
|
386
|
+
query_key = str(query)
|
|
387
|
+
company_info_df = company_common_service_new_api.get_company_info_by_field(query_key, query_field_key)
|
|
388
|
+
|
|
389
|
+
return company_info_df
|
|
189
390
|
|
|
190
391
|
|
|
191
392
|
if __name__ == '__main__':
|
|
192
|
-
save_zt_info('
|
|
393
|
+
save_zt_info('2025-11-17')
|
|
193
394
|
# from datetime import datetime
|
|
194
395
|
#
|
|
195
396
|
# if __name__ == '__main__':
|
|
@@ -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-09-05'
|
|
192
|
+
ths_zt_pool_df_test = ths_zt_pool(trade_date, None)
|
|
193
|
+
save_ths_zt_pool(ths_zt_pool_df_test, trade_date)
|