mns-scheduler 1.0.8.7__py3-none-any.whl → 1.4.3.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mns_scheduler/__init__.py +1 -3
- mns_scheduler/company_info/announce/company_announce_sync_service.py +65 -0
- mns_scheduler/company_info/{company_info_sync_api.py → base/sync_company_base_info_api.py} +239 -227
- mns_scheduler/company_info/base/sync_company_hold_info_api.py +37 -0
- mns_scheduler/company_info/base/sync_company_product_area_industry.py +161 -0
- mns_scheduler/company_info/clean/company_info_clean_api.py +133 -0
- mns_scheduler/company_info/constant/company_constant_data.py +497 -0
- mns_scheduler/company_info/{de_list_stock_service.py → de_list_stock/de_list_stock_service.py} +1 -1
- mns_scheduler/company_info/em_stock_info/__init__.py +7 -0
- mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +80 -0
- mns_scheduler/company_info/remark/__init__.py +7 -0
- mns_scheduler/company_info/remark/company_remark_info_sync.py +46 -0
- mns_scheduler/concept/clean/kpl_concept_clean_api.py +1 -1
- mns_scheduler/concept/clean/ths_concept_clean_api.py +74 -51
- mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +112 -56
- mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +6 -6
- mns_scheduler/concept/ths/detaill/__init__.py +0 -0
- mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +226 -0
- mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py +169 -0
- mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py +11 -23
- mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +19 -15
- mns_scheduler/db/col_move_service.py +10 -7
- mns_scheduler/db/db_status.py +1 -1
- mns_scheduler/db/script/__init__.py +7 -0
- mns_scheduler/db/script/col_move_script.py +45 -0
- mns_scheduler/db/script/db_move/__init__.py +7 -0
- mns_scheduler/db/script/db_move/col_move_one_service.py +34 -0
- mns_scheduler/db/script/sync/__init__.py +7 -0
- mns_scheduler/db/script/sync/local_mongo_util.py +231 -0
- mns_scheduler/db/script/sync/remote_data_sync_to_local.py +105 -0
- mns_scheduler/db/script/sync/remote_mongo_util.py +306 -0
- mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +80 -0
- mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +69 -0
- mns_scheduler/db/script/update/__init__.py +7 -0
- mns_scheduler/db/script/update/update_col_field.py +36 -0
- mns_scheduler/finance/__init__.py +1 -1
- mns_scheduler/finance/{em_financial_asset_liability_sync_service_api.py → em/em_financial_asset_liability_sync_service_api.py} +3 -3
- mns_scheduler/finance/{em_financial_profit_sync_service_api.py → em/em_financial_profit_sync_service_api.py} +30 -25
- mns_scheduler/finance/{finance_common_api.py → em/finance_common_api.py} +4 -4
- mns_scheduler/finance/sync_financial_report_service_task.py +202 -0
- mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py +77 -0
- mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py +161 -0
- mns_scheduler/hk/__init__.py +1 -1
- mns_scheduler/hk/hk_company_info_sync_service_api.py +49 -5
- mns_scheduler/hk/hk_industry_info_sync_service_api.py +68 -0
- mns_scheduler/industry/__init__.py +7 -0
- mns_scheduler/industry/ths/__init__.py +7 -0
- mns_scheduler/industry/ths/ths_industry_index_service.py +58 -0
- mns_scheduler/industry/ths/ths_industry_sync_service.py +68 -0
- mns_scheduler/irm/__init__.py +1 -1
- mns_scheduler/irm/api/__init__.py +1 -1
- mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +1 -1
- mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +1 -1
- mns_scheduler/irm/stock_irm_cninfo_service.py +15 -13
- mns_scheduler/k_line/clean/daily/__init__.py +1 -1
- mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +57 -7
- mns_scheduler/k_line/clean/daily/daily_k_line_service.py +16 -3
- mns_scheduler/k_line/clean/k_line_info_clean_impl.py +3 -2
- mns_scheduler/k_line/clean/k_line_info_clean_task.py +42 -31
- mns_scheduler/k_line/clean/week_month/__init__.py +1 -1
- mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +125 -27
- mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +72 -17
- mns_scheduler/k_line/common/__init__.py +7 -0
- mns_scheduler/k_line/common/k_line_common_api.py +188 -0
- mns_scheduler/k_line/hot_stocks/__init__.py +1 -1
- mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +1 -1
- mns_scheduler/k_line/month_week_daily/bfq_k_line_sync.py +77 -0
- mns_scheduler/k_line/{sync → month_week_daily}/daily_week_month_line_sync.py +14 -14
- mns_scheduler/k_line/sync_status/__init__.py +7 -0
- mns_scheduler/k_line/sync_status/k_line_sync_status_check.py +54 -0
- mns_scheduler/k_line/test/__init__.py +7 -0
- mns_scheduler/k_line/test/k_line_info_clean_his_data.py +41 -0
- mns_scheduler/k_line/year_quarter/__init__.py +7 -0
- mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +76 -0
- mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +4 -2
- mns_scheduler/kpl/selection/symbol/sync_kpl_concept_symbol_choose_reason_api.py +108 -0
- mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +12 -7
- mns_scheduler/lhb/__init__.py +1 -1
- mns_scheduler/lhb/stock_lhb_sync_service.py +1 -1
- mns_scheduler/open/__init__.py +1 -1
- mns_scheduler/open/sync_one_day_open_data_to_db_service.py +6 -22
- mns_scheduler/risk/__init__.py +1 -1
- mns_scheduler/risk/compliance/__init__.py +0 -0
- mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +71 -0
- mns_scheduler/risk/financial/__init__.py +0 -0
- mns_scheduler/risk/financial/annual_report_audit_check_api.py +54 -0
- mns_scheduler/risk/financial/net_assets_check_api.py +75 -0
- mns_scheduler/risk/financial/profit_income_check_api.py +80 -0
- mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py +1 -0
- mns_scheduler/risk/financial_report_risk_check_api.py +42 -0
- mns_scheduler/risk/major_violations/__init__.py +0 -0
- mns_scheduler/risk/{register_and_investigate_stock_sync_api.py → major_violations/register_and_investigate_stock_sync_api.py} +17 -8
- mns_scheduler/risk/self/__init__.py +0 -0
- mns_scheduler/risk/{wei_pan_stock_api.py → self/wei_pan_stock_api.py} +10 -4
- mns_scheduler/risk/test/__init__.py +7 -0
- mns_scheduler/{finance → risk}/test/fix_blask_list.py +6 -10
- mns_scheduler/risk/transactions/__init__.py +0 -0
- mns_scheduler/risk/transactions/transactions_check_api.py +183 -0
- mns_scheduler/self_choose/__init__.py +7 -0
- mns_scheduler/self_choose/ths_self_choose_service.py +158 -0
- mns_scheduler/trade/auto_ipo_buy_api.py +2 -2
- mns_scheduler/trade/auto_login/__init__.py +7 -0
- mns_scheduler/trade/auto_login/trader_auto_service.py +32 -0
- mns_scheduler/trade/auto_sell_service_api.py +10 -8
- mns_scheduler/trade/balance/__init__.py +7 -0
- mns_scheduler/trade/balance/ths_account_balance_service.py +7 -0
- mns_scheduler/trade/sync_position_api.py +41 -8
- mns_scheduler/trade/task/__init__.py +7 -0
- mns_scheduler/trade/task/trader_task_service.py +65 -0
- mns_scheduler/trade/tfp/__init__.py +7 -0
- mns_scheduler/trade/tfp/stock_tfp_info_sync.py +56 -0
- mns_scheduler/zb/stock_zb_pool_sync.py +1 -15
- mns_scheduler/zt/high_chg/sync_high_chg_pool_service.py +2 -3
- mns_scheduler/zt/high_chg/sync_high_chg_real_time_quotes_service.py +12 -8
- mns_scheduler/zt/open_data/kcx_high_chg_open_data_sync.py +10 -25
- mns_scheduler/zt/script/__init__.py +1 -1
- mns_scheduler/zt/script/fix_error_deal_day.py +41 -0
- mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +2 -11
- mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +2 -2
- mns_scheduler/zt/script/sync_now_higt_chg_zt.py +43 -0
- mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +413 -0
- mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +193 -0
- mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +58 -0
- mns_scheduler/zz_task/compensation/__init__.py +0 -0
- mns_scheduler/zz_task/compensation/compensate_task.py +161 -0
- mns_scheduler/zz_task/compensation/compensate_task_one_day.py +142 -0
- mns_scheduler/zz_task/data_sync_task.py +271 -121
- {mns_scheduler-1.0.8.7.dist-info → mns_scheduler-1.4.3.2.dist-info}/METADATA +1 -1
- mns_scheduler-1.4.3.2.dist-info/RECORD +169 -0
- {mns_scheduler-1.0.8.7.dist-info → mns_scheduler-1.4.3.2.dist-info}/WHEEL +1 -1
- mns_scheduler/backup/app/ths_new_concept_sync_app.py +0 -122
- mns_scheduler/backup/em/em_new_concept_his_sync.py +0 -99
- mns_scheduler/backup/em/em_new_concept_sync_common_api.py +0 -139
- mns_scheduler/backup/em/em_new_concept_sync_web.py +0 -55
- mns_scheduler/backup/wen_cai/wen_cai_concept_sync.py +0 -51
- mns_scheduler/big_deal/ths_big_deal_sync.py +0 -98
- mns_scheduler/company_info/company_constant_data.py +0 -322
- mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_by_ak_api.py +0 -103
- mns_scheduler/concept/ths/sync_new_index/sync_ths_new_concept_by_web_api.py +0 -89
- mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py +0 -202
- mns_scheduler/finance/sync_financial_report_service_api.py +0 -113
- mns_scheduler/real_time/realtime_quotes_now_create_db_index.py +0 -27
- mns_scheduler/real_time/realtime_quotes_now_sync.py +0 -232
- mns_scheduler/risk/stock_equity_mortgage_sync_api.py +0 -32
- mns_scheduler/zt/zt_pool/zt_pool_sync_api.py +0 -151
- mns_scheduler/zz_task/sync_realtime_quotes_task.py +0 -28
- mns_scheduler-1.0.8.7.dist-info/RECORD +0 -112
- /mns_scheduler/{backup/app → company_info/announce}/__init__.py +0 -0
- /mns_scheduler/{backup/em → company_info/base}/__init__.py +0 -0
- /mns_scheduler/{backup/wen_cai → company_info/clean}/__init__.py +0 -0
- /mns_scheduler/{big_deal → company_info/constant}/__init__.py +0 -0
- /mns_scheduler/{real_time → company_info/de_list_stock}/__init__.py +0 -0
- /mns_scheduler/{backup → finance/em}/__init__.py +0 -0
- /mns_scheduler/finance/{test → xue_qiu}/__init__.py +0 -0
- /mns_scheduler/k_line/{sync → month_week_daily}/__init__.py +0 -0
- {mns_scheduler-1.0.8.7.dist-info → mns_scheduler-1.4.3.2.dist-info}/top_level.txt +0 -0
|
@@ -2,28 +2,28 @@ 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.component.
|
|
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):
|
|
25
25
|
return None
|
|
26
|
-
position_list =
|
|
26
|
+
position_list = deal_service_api.get_position('easy_trader')
|
|
27
27
|
position_df = pd.DataFrame(position_list)
|
|
28
28
|
position_df = position_df.rename(columns={"明细": "detail",
|
|
29
29
|
"序号": "index",
|
|
@@ -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()
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import mns_common.utils.cmd_util as cmd_util
|
|
9
|
+
import time
|
|
10
|
+
import mns_scheduler.trade.auto_login.trader_auto_service as trader_auto_service
|
|
11
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
12
|
+
from loguru import logger
|
|
13
|
+
|
|
14
|
+
# 交易服务端
|
|
15
|
+
TRADER_SERVER_PATH = 'H:\\mns_trader_server.bat'
|
|
16
|
+
# 实时行情同步任务 python名称
|
|
17
|
+
TRADER_SERVER_NAME = "mns_trader_server"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# 打开交易客户端
|
|
21
|
+
def open_trader_terminal():
|
|
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
|
|
29
|
+
trader_auto_service.auto_login()
|
|
30
|
+
time.sleep(5)
|
|
31
|
+
# 杀死[交易web服务端],使用同花顺需要先打开xiadan.exe,在重新打开[交易web服务端]
|
|
32
|
+
logger.info('杀死[交易web服务端]')
|
|
33
|
+
kill_server()
|
|
34
|
+
time.sleep(5)
|
|
35
|
+
logger.info('重新打开 [交易web服务端]')
|
|
36
|
+
# 重新打开 [交易web服务端]
|
|
37
|
+
cmd_util.open_bat_file(TRADER_SERVER_PATH)
|
|
38
|
+
|
|
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
|
+
|
|
50
|
+
def kill_server():
|
|
51
|
+
all_cmd_processes = cmd_util.get_all_process()
|
|
52
|
+
all_cmd_processes_trader = all_cmd_processes.loc[
|
|
53
|
+
(all_cmd_processes['total_info'].str.contains(TRADER_SERVER_NAME, case=False, na=False))]
|
|
54
|
+
if data_frame_util.is_not_empty(all_cmd_processes_trader):
|
|
55
|
+
for processes_one in all_cmd_processes_trader.itertuples():
|
|
56
|
+
try:
|
|
57
|
+
process_pid = processes_one.process_pid
|
|
58
|
+
cmd_util.kill_process_by_pid(process_pid)
|
|
59
|
+
except BaseException as e:
|
|
60
|
+
logger.error("杀死进程异常:{}", e)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
if __name__ == '__main__':
|
|
64
|
+
# kill_server()
|
|
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,18 +27,4 @@ def sync_stock_zb_pool(str_now_day):
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
if __name__ == '__main__':
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
now_date = datetime.now()
|
|
33
|
-
|
|
34
|
-
str_now_day_01 = sync_date.strftime('%Y-%m-%d')
|
|
35
|
-
|
|
36
|
-
while now_date > sync_date:
|
|
37
|
-
stock_zb_pool_df = sync_stock_zb_pool(str_now_day_01)
|
|
38
|
-
if stock_zb_pool_df is None:
|
|
39
|
-
sync_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_now_day_01), 1)
|
|
40
|
-
str_now_day_01 = sync_date.strftime('%Y-%m-%d')
|
|
41
|
-
continue
|
|
42
|
-
mongodb_util.save_mongo(stock_zb_pool_df, 'stock_zb_pool')
|
|
43
|
-
sync_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_now_day_01), 1)
|
|
44
|
-
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
|
|
|
@@ -294,4 +294,3 @@ def get_symbol_last_concept(symbol, str_day):
|
|
|
294
294
|
return mongodb_util.descend_query(query, db_name_constant.THS_STOCK_CONCEPT_DETAIL, 'str_day', 1)
|
|
295
295
|
|
|
296
296
|
|
|
297
|
-
|
|
@@ -9,7 +9,7 @@ sys.path.append(project_path)
|
|
|
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.utils.date_handle_util as date_handle_util
|
|
12
|
-
import mns_common.component.company.
|
|
12
|
+
import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
|
|
13
13
|
import mns_common.component.data.data_init_api as data_init_api
|
|
14
14
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
15
15
|
import mns_common.utils.db_util as db_util
|
|
@@ -24,14 +24,15 @@ choose_field = ["_id",
|
|
|
24
24
|
"symbol",
|
|
25
25
|
"name",
|
|
26
26
|
"industry",
|
|
27
|
-
"now_price",
|
|
28
27
|
"chg",
|
|
29
28
|
"quantity_ratio",
|
|
30
29
|
"amount_level",
|
|
30
|
+
'sum_main_inflow_disk',
|
|
31
31
|
"disk_ratio",
|
|
32
|
+
"now_price",
|
|
32
33
|
"real_disk_diff_amount_exchange",
|
|
33
34
|
'max_real_main_inflow_multiple',
|
|
34
|
-
|
|
35
|
+
|
|
35
36
|
"real_main_inflow_multiple",
|
|
36
37
|
"real_super_main_inflow_multiple",
|
|
37
38
|
"super_main_inflow_multiple",
|
|
@@ -73,7 +74,7 @@ choose_field = ["_id",
|
|
|
73
74
|
def sync_high_chg_real_time_quotes(str_day):
|
|
74
75
|
mongo = db_util.get_db(str_day)
|
|
75
76
|
|
|
76
|
-
realtime_quotes_db_name =
|
|
77
|
+
realtime_quotes_db_name = db_name_constant.REAL_TIME_QUOTES_NOW + "_" + str_day
|
|
77
78
|
high_chg_list = get_high_chg_symbol(str_day)
|
|
78
79
|
if high_chg_list is None or len(high_chg_list) == 0:
|
|
79
80
|
return
|
|
@@ -84,16 +85,15 @@ def sync_high_chg_real_time_quotes(str_day):
|
|
|
84
85
|
real_time_quotes_now_high_chg_all = mongo.find_query_data(realtime_quotes_db_name, query_all)
|
|
85
86
|
if real_time_quotes_now_high_chg_all.shape[0] == 0:
|
|
86
87
|
return
|
|
87
|
-
real_time_quotes_now_high_chg_all =
|
|
88
|
-
real_time_quotes_now_high_chg_all
|
|
89
|
-
high_chg_list)
|
|
88
|
+
real_time_quotes_now_high_chg_all = company_common_service_new_api.amend_ths_industry(
|
|
89
|
+
real_time_quotes_now_high_chg_all)
|
|
90
90
|
real_time_quotes_now_high_chg_all.dropna(subset=['symbol'], axis=0,
|
|
91
91
|
inplace=True)
|
|
92
92
|
real_time_quotes_now_high_chg_all = data_init_api.calculate_parameter_factor(
|
|
93
93
|
real_time_quotes_now_high_chg_all)
|
|
94
94
|
|
|
95
95
|
real_time_quotes_now_high_chg_all['amount_level'] = round(
|
|
96
|
-
(real_time_quotes_now_high_chg_all['amount'] / common_service_fun_api.HUNDRED_MILLION), 2)
|
|
96
|
+
(real_time_quotes_now_high_chg_all['amount'] / common_service_fun_api.HUNDRED_MILLION), 2)
|
|
97
97
|
real_time_quotes_now_high_chg_all['flow_mv_sp'] = round(
|
|
98
98
|
(real_time_quotes_now_high_chg_all['flow_mv'] / common_service_fun_api.HUNDRED_MILLION), 2)
|
|
99
99
|
real_time_quotes_now_high_chg_all['total_mv_sp'] = round(
|
|
@@ -139,3 +139,7 @@ def save_realtime_quotes_now_zt_data(realtime_quotes_now_zt, str_day, symbol):
|
|
|
139
139
|
result = mongodb_util.remove_data(remove_query, db_name_constant.ZT_STOCK_REAL_TIME_QUOTES).acknowledged
|
|
140
140
|
if result:
|
|
141
141
|
mongodb_util.insert_mongo(realtime_quotes_now_zt, db_name_constant.ZT_STOCK_REAL_TIME_QUOTES)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
if __name__ == '__main__':
|
|
145
|
+
sync_high_chg_real_time_quotes('2024-12-26')
|
|
@@ -10,7 +10,7 @@ import mns_common.utils.date_handle_util as date_handle_util
|
|
|
10
10
|
from loguru import logger
|
|
11
11
|
|
|
12
12
|
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
13
|
-
import mns_common.component.company.
|
|
13
|
+
import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
|
|
14
14
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
15
15
|
import mns_common.component.data.data_init_api as data_init_api
|
|
16
16
|
import pandas as pd
|
|
@@ -62,22 +62,6 @@ realtime_quotes_now_zt_new_kc_open_field = ['_id',
|
|
|
62
62
|
'real_disk_diff_amount_exchange', 'no_open_data']
|
|
63
63
|
|
|
64
64
|
|
|
65
|
-
# fix 错杀数据 有成交量的数据
|
|
66
|
-
def fix_industry_data(real_time_quotes_now):
|
|
67
|
-
# fix industry
|
|
68
|
-
real_time_quotes_now_r = company_common_service_api.amendment_industry(real_time_quotes_now.copy())
|
|
69
|
-
|
|
70
|
-
symbol_list = list(real_time_quotes_now_r['symbol'])
|
|
71
|
-
|
|
72
|
-
na_real_now = real_time_quotes_now.loc[
|
|
73
|
-
~(real_time_quotes_now['symbol'].isin(symbol_list))]
|
|
74
|
-
|
|
75
|
-
na_real_now = na_real_now.loc[na_real_now['amount'] != 0]
|
|
76
|
-
|
|
77
|
-
real_time_quotes_now_result = pd.concat([real_time_quotes_now_r, na_real_now], axis=0)
|
|
78
|
-
return real_time_quotes_now_result
|
|
79
|
-
|
|
80
|
-
|
|
81
65
|
def sync_all_kc_zt_data(str_day, symbols):
|
|
82
66
|
if symbols is None:
|
|
83
67
|
query_daily = {'date': date_handle_util.no_slash_date(str_day),
|
|
@@ -92,11 +76,9 @@ def sync_all_kc_zt_data(str_day, symbols):
|
|
|
92
76
|
logger.error("无k线数据:{}", symbols)
|
|
93
77
|
return
|
|
94
78
|
|
|
95
|
-
|
|
96
|
-
company_info['symbol'] = company_info['_id']
|
|
97
|
-
company_info = company_info.loc[company_info['_id'].isin(list(kc_stock_qfq_daily['symbol']))]
|
|
79
|
+
kc_stock_qfq_daily = company_common_service_new_api.amend_ths_industry(kc_stock_qfq_daily)
|
|
98
80
|
|
|
99
|
-
for stock_one in
|
|
81
|
+
for stock_one in kc_stock_qfq_daily.itertuples():
|
|
100
82
|
try:
|
|
101
83
|
|
|
102
84
|
kc_stock_qfq_daily.loc[
|
|
@@ -150,7 +132,9 @@ def sync_all_kc_zt_data(str_day, symbols):
|
|
|
150
132
|
query_real_time = {'symbol': kc_one.symbol}
|
|
151
133
|
db = db_util.get_db(str_day)
|
|
152
134
|
realtime_quotes_now_kc = db.find_query_data(db_name, query_real_time)
|
|
153
|
-
|
|
135
|
+
stock_name = kc_one.name
|
|
136
|
+
if stock_name.startswith('N'):
|
|
137
|
+
continue
|
|
154
138
|
if realtime_quotes_now_kc.shape[0] == 0:
|
|
155
139
|
logger.error("当期日期代码无开盘数据:{},{}", str_day, kc_one.symbol)
|
|
156
140
|
continue
|
|
@@ -182,11 +166,14 @@ def one_symbol_day_open_data(realtime_quotes_now_kc, kc_one, str_day):
|
|
|
182
166
|
realtime_quotes_now_zt_new_kc_open_copy.loc[:, 'yesterday_high_chg'] = kc_one.yesterday_high_chg
|
|
183
167
|
realtime_quotes_now_zt_new_kc_open_copy.loc[:, 'today_chg'] = kc_one.chg
|
|
184
168
|
realtime_quotes_now_zt_new_kc_open_copy.loc[:, 'str_day'] = str_day
|
|
185
|
-
|
|
169
|
+
realtime_quotes_now_zt_new_kc_open_copy = company_common_service_new_api.amend_ths_industry(
|
|
170
|
+
realtime_quotes_now_zt_new_kc_open_copy)
|
|
186
171
|
realtime_quotes_now_zt_new_kc_open_copy = handle_init_real_time_quotes_data(
|
|
187
172
|
realtime_quotes_now_zt_new_kc_open_copy.copy(),
|
|
188
173
|
str_now_date,
|
|
189
174
|
1)
|
|
175
|
+
if data_frame_util.is_empty(realtime_quotes_now_zt_new_kc_open_copy):
|
|
176
|
+
return None
|
|
190
177
|
realtime_quotes_now_zt_new_kc_open_copy = realtime_quotes_now_zt_new_kc_open_copy[
|
|
191
178
|
realtime_quotes_now_zt_new_kc_open_field]
|
|
192
179
|
|
|
@@ -219,8 +206,6 @@ def handle_init_real_time_quotes_data(real_time_quotes_now, str_now_date, number
|
|
|
219
206
|
real_time_quotes_now = common_service_fun_api.exclude_b_symbol(real_time_quotes_now.copy())
|
|
220
207
|
# classification symbol
|
|
221
208
|
real_time_quotes_now = common_service_fun_api.classify_symbol(real_time_quotes_now.copy())
|
|
222
|
-
# fix industry
|
|
223
|
-
real_time_quotes_now = fix_industry_data(real_time_quotes_now.copy())
|
|
224
209
|
# calculate parameter
|
|
225
210
|
real_time_quotes_now = data_init_api.calculate_parameter_factor(real_time_quotes_now.copy())
|
|
226
211
|
|
|
@@ -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,17 +2,15 @@ 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
|
|
9
9
|
from loguru import logger
|
|
10
10
|
|
|
11
|
-
|
|
12
11
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
13
12
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
14
13
|
|
|
15
|
-
|
|
16
14
|
mongodb_util = MongodbUtil('27017')
|
|
17
15
|
mongodb_util_21019 = MongodbUtil('27019')
|
|
18
16
|
realtime_quotes_now_zt_new_kc_open_field = ['_id',
|
|
@@ -52,13 +50,6 @@ realtime_quotes_now_zt_new_kc_open_field = ['_id',
|
|
|
52
50
|
'max_real_main_inflow_multiple', 'list_date',
|
|
53
51
|
'real_super_main_inflow_multiple', 'real_flow_mv',
|
|
54
52
|
'real_disk_diff_amount_exchange', 'no_open_data']
|
|
55
|
-
# kcx 高涨幅开盘数据同步
|
|
56
|
-
def realtime_quotes_now_zt_new_kc_open_sync():
|
|
57
|
-
realtime_quotes_now_zt_new_kc_open = mongodb_util.find_all_data('realtime_quotes_now_zt_new_kc_open')
|
|
58
|
-
realtime_quotes_now_zt_new_kc_open = realtime_quotes_now_zt_new_kc_open[realtime_quotes_now_zt_new_kc_open_field]
|
|
59
|
-
realtime_quotes_now_zt_new_kc_open = realtime_quotes_now_zt_new_kc_open.sort_values(by=['str_day'], ascending=False)
|
|
60
|
-
|
|
61
|
-
mongodb_util.insert_mongo(realtime_quotes_now_zt_new_kc_open, 'realtime_quotes_now_zt_new_kc_open_copy')
|
|
62
53
|
|
|
63
54
|
|
|
64
55
|
# query = {'$and': [{"_id": {'$lte': str_end}}, {"_id": {'$gte': '2022-04-25'}}]}
|
|
@@ -92,7 +83,7 @@ def fix_miss_data(str_end):
|
|
|
92
83
|
|
|
93
84
|
|
|
94
85
|
if __name__ == '__main__':
|
|
95
|
-
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)
|
|
96
87
|
# sync_all_kc_zt_data('2023-08-16')
|
|
97
88
|
# sync_all_kc_zt_data('2023-07-07')
|
|
98
89
|
# realtime_quotes_now_zt_new_kc_open_sync()
|
|
@@ -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)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import mns_common.component.em.em_stock_info_api as em_stock_info_api
|
|
9
|
+
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
10
|
+
import mns_scheduler.k_line.month_week_daily.daily_week_month_line_sync as daily_week_month_line_sync
|
|
11
|
+
from datetime import datetime
|
|
12
|
+
import mns_scheduler.zt.zt_pool.em_zt_pool_sync_api as em_zt_pool_sync_api
|
|
13
|
+
import mns_scheduler.zt.high_chg.sync_high_chg_pool_service as sync_high_chg_pool_service
|
|
14
|
+
import mns_scheduler.zt.open_data.kcx_high_chg_open_data_sync as kcx_high_chg_open_data_sync
|
|
15
|
+
import mns_scheduler.zt.high_chg.sync_high_chg_real_time_quotes_service as sync_high_chg_real_time_quotes_service
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def sync_now_day_high_chg():
|
|
19
|
+
real_time_quotes_now_es = em_stock_info_api.get_a_stock_info()
|
|
20
|
+
real_time_quotes_now_es_high_chg = real_time_quotes_now_es.loc[
|
|
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')
|
|
25
|
+
# 同步qfq k线
|
|
26
|
+
daily_week_month_line_sync.sync_all_daily_data('daily', 'qfq', 'stock_qfq_daily', str_now_day,
|
|
27
|
+
list(real_time_quotes_now_es_high_chg['symbol']))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# 同步当前涨停
|
|
31
|
+
em_zt_pool_sync_api.save_zt_info(str_now_day)
|
|
32
|
+
|
|
33
|
+
# 同步涨幅列表
|
|
34
|
+
sync_high_chg_pool_service.sync_stock_high_chg_pool_list(str_now_day, None)
|
|
35
|
+
|
|
36
|
+
# 同步kcx 集合竞价数据
|
|
37
|
+
kcx_high_chg_open_data_sync.sync_all_kc_zt_data(str_now_day, None)
|
|
38
|
+
# 同步实时行情数据
|
|
39
|
+
sync_high_chg_real_time_quotes_service.sync_high_chg_real_time_quotes(str_now_day)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
if __name__ == '__main__':
|
|
43
|
+
sync_now_day_high_chg()
|