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
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
10
|
+
from loguru import logger
|
|
11
|
+
import mns_common.api.em.real_time.east_money_debt_api as east_money_debt_api
|
|
12
|
+
import mns_common.api.em.real_time.east_money_etf_api as east_money_etf_api
|
|
13
|
+
import mns_common.api.em.real_time.east_money_stock_a_v2_api as east_money_stock_a_v2_api
|
|
14
|
+
from datetime import datetime
|
|
15
|
+
import mns_common.constant.extra_income_db_name as extra_income_db_name
|
|
16
|
+
import mns_common.api.em.real_time.east_money_stock_hk_api as east_money_stock_hk_api
|
|
17
|
+
import mns_common.component.cookie.cookie_info_service as cookie_info_service
|
|
18
|
+
import mns_common.api.em.real_time.east_money_stock_us_api as east_money_stock_us_api
|
|
19
|
+
|
|
20
|
+
mongodb_util = MongodbUtil('27017')
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def sync_all_em_stock_info():
|
|
24
|
+
now_date = datetime.now()
|
|
25
|
+
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
26
|
+
|
|
27
|
+
logger.info("同步东方财富a,etf,kzz,us,hk,信息开始")
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
# 这里需要使用详情接口 获取全量数据
|
|
31
|
+
em_a_stock_info_df = east_money_stock_a_v2_api.get_stock_real_time_quotes(60)
|
|
32
|
+
em_a_stock_info_df['list_date'] = em_a_stock_info_df['list_date'].fillna(19890604)
|
|
33
|
+
em_a_stock_info_df['_id'] = em_a_stock_info_df['symbol']
|
|
34
|
+
em_a_stock_info_df['sync_time'] = str_now_date
|
|
35
|
+
mongodb_util.save_mongo(em_a_stock_info_df, extra_income_db_name.EM_A_STOCK_INFO)
|
|
36
|
+
except BaseException as e:
|
|
37
|
+
logger.error("同步东方财富A股信息异常:{}", e)
|
|
38
|
+
try:
|
|
39
|
+
em_etf_info = east_money_etf_api.get_etf_real_time_quotes(30, 6)
|
|
40
|
+
em_etf_info['sync_time'] = str_now_date
|
|
41
|
+
mongodb_util.save_mongo(em_etf_info, extra_income_db_name.EM_ETF_INFO)
|
|
42
|
+
except BaseException as e:
|
|
43
|
+
logger.error("同步东方财富ETF信息异常:{}", e)
|
|
44
|
+
|
|
45
|
+
try:
|
|
46
|
+
em_kzz_info = east_money_debt_api.get_kzz_real_time_quotes(30, 6)
|
|
47
|
+
em_kzz_info['_id'] = em_kzz_info['symbol']
|
|
48
|
+
em_kzz_info['sync_time'] = str_now_date
|
|
49
|
+
mongodb_util.save_mongo(em_kzz_info, extra_income_db_name.EM_KZZ_INFO)
|
|
50
|
+
except BaseException as e:
|
|
51
|
+
logger.error("同步东方财富可转债信息异常:{}", e)
|
|
52
|
+
|
|
53
|
+
# em_cookie = cookie_info_service.get_em_cookie()
|
|
54
|
+
# try:
|
|
55
|
+
# em_hk_stock_info = east_money_stock_hk_api.get_hk_real_time_quotes(em_cookie, proxies)
|
|
56
|
+
# em_hk_stock_info['_id'] = em_hk_stock_info['symbol']
|
|
57
|
+
# mongodb_util.save_mongo(em_hk_stock_info, extra_income_db_name.EM_HK_STOCK_INFO)
|
|
58
|
+
# except BaseException as e:
|
|
59
|
+
# logger.error("同步东方财富港股信息异常:{}", e)
|
|
60
|
+
#
|
|
61
|
+
# try:
|
|
62
|
+
# em_cookie = cookie_info_service.get_em_cookie()
|
|
63
|
+
# em_us_stock_info = east_money_stock_us_api.get_us_stock_real_time_quotes(em_cookie, proxies)
|
|
64
|
+
# em_us_stock_info['_id'] = em_us_stock_info['symbol']
|
|
65
|
+
# mongodb_util.save_mongo(em_us_stock_info, extra_income_db_name.EM_US_STOCK_INFO)
|
|
66
|
+
# em_us_etf_info = em_us_stock_info.loc[(em_us_stock_info['amount'] != 0) & (em_us_stock_info['total_mv'] == 0)]
|
|
67
|
+
# em_us_etf_info = em_us_etf_info.sort_values(by=['amount'], ascending=False)
|
|
68
|
+
# mongodb_util.save_mongo(em_us_etf_info, extra_income_db_name.EM_US_ETF_INFO)
|
|
69
|
+
#
|
|
70
|
+
# except BaseException as e:
|
|
71
|
+
# logger.error("同步东方财富美股信息异常:{}", e)
|
|
72
|
+
logger.info("同步东方财富a,etf,kzz,us,hk,信息完成")
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
if __name__ == '__main__':
|
|
76
|
+
sync_all_em_stock_info()
|
|
77
|
+
# em_cookie = cookie_info_service.get_em_cookie()
|
|
78
|
+
# em_us_stock_info = east_money_stock_us_api.get_us_stock_real_time_quotes(em_cookie, None)
|
|
79
|
+
# em_us_stock_info['_id'] = em_us_stock_info['symbol']
|
|
80
|
+
# mongodb_util.save_mongo(em_us_stock_info, db_name_constant.EM_US_STOCK_INFO)
|
|
@@ -2,11 +2,11 @@ import sys
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') +
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
import mns_common.api.ths.concept.web.ths_company_info_web as ths_company_info_web
|
|
9
|
-
import mns_common.
|
|
9
|
+
import mns_common.component.em.em_stock_info_api as em_stock_info_api
|
|
10
10
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
11
11
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
12
12
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
@@ -18,7 +18,7 @@ mongodb_util = MongodbUtil('27017')
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def sync_company_remark_info():
|
|
21
|
-
east_money_stock_info =
|
|
21
|
+
east_money_stock_info = em_stock_info_api.get_a_stock_info()
|
|
22
22
|
de_listed_stock_list = company_common_service_api.get_de_list_company()
|
|
23
23
|
east_money_stock_info = east_money_stock_info.loc[~(
|
|
24
24
|
east_money_stock_info['symbol'].isin(de_listed_stock_list))]
|
|
@@ -7,12 +7,13 @@ project_path = file_path[0:end]
|
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
9
9
|
import pandas as pd
|
|
10
|
-
import
|
|
10
|
+
import mns_common.api.ths.concept.web.ths_concept_index_web as ths_concept_index_web
|
|
11
11
|
import time
|
|
12
12
|
from loguru import logger
|
|
13
13
|
import mns_common.component.company.company_common_service_api as company_common_service_api
|
|
14
14
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
15
15
|
import mns_common.component.concept.ths_concept_common_service_api as ths_concept_common_service_api
|
|
16
|
+
import mns_common.api.ths.concept.app.ths_concept_index_app as ths_concept_index_app
|
|
16
17
|
|
|
17
18
|
mongodb_util = MongodbUtil('27017')
|
|
18
19
|
|
|
@@ -76,9 +77,22 @@ def update_one_concept_relevance_industry(concept_code):
|
|
|
76
77
|
ths_stock_concept_detail_df['first_relevance_industry'] = first_relevance_industry
|
|
77
78
|
ths_stock_concept_detail_df['second_relevance_industry'] = second_relevance_industry
|
|
78
79
|
|
|
79
|
-
|
|
80
|
+
new_values_list = {"$set": {"first_relevance_industry": first_relevance_industry,
|
|
81
|
+
"second_relevance_industry": second_relevance_industry,
|
|
82
|
+
"first_relevance_industry_number": first_relevance_industry_number,
|
|
83
|
+
"second_relevance_industry_number": second_relevance_industry_number,
|
|
84
|
+
"concept_count": concept_count
|
|
85
|
+
}}
|
|
80
86
|
|
|
81
|
-
|
|
87
|
+
update_query = {"symbol": concept_code}
|
|
88
|
+
mongodb_util.update_one_query(update_query, new_values_list, db_name_constant.THS_CONCEPT_LIST)
|
|
89
|
+
|
|
90
|
+
new_values_detail = {"$set": {"first_relevance_industry": first_relevance_industry,
|
|
91
|
+
"second_relevance_industry": second_relevance_industry
|
|
92
|
+
|
|
93
|
+
}}
|
|
94
|
+
update_query_detail = {"concept_code": concept_code}
|
|
95
|
+
mongodb_util.update_one_query(update_query_detail, new_values_detail, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
|
|
82
96
|
|
|
83
97
|
|
|
84
98
|
# 更新空名字
|
|
@@ -93,7 +107,7 @@ def update_null_name():
|
|
|
93
107
|
exist_url = concept_one.url
|
|
94
108
|
|
|
95
109
|
if name == '':
|
|
96
|
-
concept_name =
|
|
110
|
+
concept_name = ths_concept_index_web.get_concept_name(concept_code)
|
|
97
111
|
query_concept = {"symbol": concept_code}
|
|
98
112
|
new_values = {'$set': {"name": concept_name}}
|
|
99
113
|
mongodb_util.update_one_query(query_concept, new_values, 'ths_concept_list')
|
|
@@ -114,6 +128,8 @@ def update_null_name():
|
|
|
114
128
|
|
|
115
129
|
|
|
116
130
|
if __name__ == '__main__':
|
|
131
|
+
# update_one_concept_relevance_industry(886095)
|
|
132
|
+
update_null_name()
|
|
117
133
|
logger.info("开始")
|
|
118
134
|
update_ths_concept_info()
|
|
119
135
|
logger.info("结束")
|
|
@@ -38,15 +38,6 @@ def push_msg_to_we_chat_and_redis(concept_code, concept_name, url):
|
|
|
38
38
|
ths_concept_clean_api.update_ths_concept_info()
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
# 保存新概念信息到数据库
|
|
42
|
-
def save_ths_concept_list(concept_code, concept_name, str_day, str_now_time):
|
|
43
|
-
url = 'http://q.10jqka.com.cn/thshy/detail/code/' + str(concept_code)
|
|
44
|
-
ths_concept_list = pd.DataFrame([
|
|
45
|
-
[concept_code, concept_code, concept_name, str_day, url, str_now_time, True, True],
|
|
46
|
-
], columns=['_id', 'symbol', 'name', 'str_day', 'url', 'str_now_time', 'success', 'valid'])
|
|
47
|
-
mongodb_util.save_mongo(ths_concept_list, 'ths_concept_list')
|
|
48
|
-
|
|
49
|
-
|
|
50
41
|
# 保存新概念详细信息到数据库
|
|
51
42
|
def save_ths_concept_detail(new_concept_symbol_df,
|
|
52
43
|
concept_name, str_day,
|
|
@@ -135,8 +126,6 @@ def save_ths_concept_detail(new_concept_symbol_df,
|
|
|
135
126
|
]]
|
|
136
127
|
query_detail = {"concept_code": int(concept_code)}
|
|
137
128
|
exist_concept_detail = mongodb_util.find_query_data(db_name_constant.THS_STOCK_CONCEPT_DETAIL, query_detail)
|
|
138
|
-
# 更新入选理由
|
|
139
|
-
update_long_short(new_concept_symbol_df)
|
|
140
129
|
|
|
141
130
|
if exist_concept_detail is None or exist_concept_detail.shape[0] == 0:
|
|
142
131
|
new_concept_symbol_df['grade'] = 1
|
|
@@ -169,26 +158,42 @@ def save_ths_concept_detail(new_concept_symbol_df,
|
|
|
169
158
|
|
|
170
159
|
|
|
171
160
|
# 更新入选理由
|
|
172
|
-
def update_long_short(new_concept_symbol_df):
|
|
161
|
+
def update_long_short(new_concept_symbol_df, exist_concept_detail):
|
|
173
162
|
if data_frame_util.is_empty(new_concept_symbol_df):
|
|
174
163
|
return None
|
|
175
164
|
for new_concept_one in new_concept_symbol_df.itertuples():
|
|
176
165
|
try:
|
|
177
166
|
query = {'symbol': new_concept_one.symbol, 'concept_code': new_concept_one.concept_code}
|
|
178
|
-
new_values = {"$set":{'long': new_concept_one.long, "short": new_concept_one.short}}
|
|
167
|
+
new_values = {"$set": {'long': new_concept_one.long, "short": new_concept_one.short}}
|
|
179
168
|
mongodb_util.update_many(query, new_values, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
|
|
180
169
|
mongodb_util.update_many(query, new_values, db_name_constant.THS_STOCK_CONCEPT_DETAIL_APP)
|
|
181
170
|
except BaseException as e:
|
|
182
171
|
logger.error("更新入选理由异常:{}", e)
|
|
183
|
-
|
|
184
|
-
|
|
172
|
+
# 更新已经被删除概念的股票
|
|
173
|
+
# update_delete_concept_symbol(list(new_concept_symbol_df['concept_code'])[0], new_concept_symbol_df,
|
|
174
|
+
# exist_concept_detail)
|
|
175
|
+
# 更新公司表信息 todo 清空cache 公司表中 common_service_fun_api.py get_company_info_industry
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
## 更新已经被删除这个概念的股票
|
|
179
|
+
# def update_delete_concept_symbol(concept_code, new_concept_symbol_df, exist_concept_detail):
|
|
180
|
+
# delete_concept_symbol_df = exist_concept_detail.loc[
|
|
181
|
+
# ~(exist_concept_detail['symbol'].isin(list(new_concept_symbol_df['symbol'])))]
|
|
182
|
+
#
|
|
183
|
+
# if data_frame_util.is_not_empty(delete_concept_symbol_df):
|
|
184
|
+
# new_values = {"$set": {"grade": 0}}
|
|
185
|
+
# query = {'symbol': {"$in": list(delete_concept_symbol_df['symbol'])}, 'concept_code': concept_code}
|
|
186
|
+
# mongodb_util.update_many(query, new_values, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
|
|
187
|
+
# mongodb_util.update_many(query, new_values, db_name_constant.THS_STOCK_CONCEPT_DETAIL_APP)
|
|
188
|
+
#
|
|
189
|
+
# exist_concept_detail = exist_concept_detail.loc[exist_concept_detail]
|
|
185
190
|
|
|
186
191
|
|
|
187
192
|
def update_company_info(new_concept_symbol_df):
|
|
188
193
|
if new_concept_symbol_df.shape[0] > 0:
|
|
189
194
|
symbol_list = list(new_concept_symbol_df['symbol'])
|
|
190
195
|
company_info_sync_api.sync_company_base_info(symbol_list)
|
|
191
|
-
company_info_clean_api.
|
|
196
|
+
company_info_clean_api.clean_company_info(None)
|
|
192
197
|
# 公司缓存信息清除
|
|
193
198
|
company_common_service_api.company_info_industry_cache_clear()
|
|
194
199
|
|
|
@@ -31,7 +31,10 @@ def update_ths_concept_choose_reason(ths_symbol_all_concepts, symbol):
|
|
|
31
31
|
{'symbol': symbol, "concept_code": int(concept_one.cid)}]}
|
|
32
32
|
short = concept_one.short
|
|
33
33
|
long = concept_one.long
|
|
34
|
-
|
|
34
|
+
if data_frame_util.is_string_not_empty(long):
|
|
35
|
+
new_values = {"$set": {"short": short, "long": long}}
|
|
36
|
+
else:
|
|
37
|
+
new_values = {"$set": {"grade": 0}}
|
|
35
38
|
mongodb_util.update_many(query, new_values, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
|
|
36
39
|
except BaseException as e:
|
|
37
40
|
logger.error("更新ths概念入选理由异常{},{},{}", symbol, concept_one.title, e)
|
|
@@ -9,7 +9,7 @@ import mns_common.component.concept.ths_concept_common_service_api as ths_concep
|
|
|
9
9
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
10
10
|
import mns_common.api.ths.concept.app.ths_concept_detail_app as ths_concept_detail_app
|
|
11
11
|
import mns_common.api.ths.wen_cai.ths_wen_cai_api as ths_wen_cai_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.component.company.company_common_service_new_api as company_common_service_new_api
|
|
14
14
|
import mns_common.api.ths.concept.web.ths_concept_detail_web as ths_concept_detail_web
|
|
15
15
|
import math
|
|
@@ -24,7 +24,7 @@ import mns_common.constant.redis_msg_constant as redis_msg_constant
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def get_ths_concept_detail(concept_code, concept_name):
|
|
27
|
-
real_time_quotes_all_stocks =
|
|
27
|
+
real_time_quotes_all_stocks = em_stock_info_api.get_a_stock_info()
|
|
28
28
|
# 1 通过入选理获取概念组成股票详情
|
|
29
29
|
ths_concept_detail_by_explain = get_ths_concept_detail_by_explain(concept_code, real_time_quotes_all_stocks)
|
|
30
30
|
# 2 app 分享链接获取概念组成详情
|
|
@@ -37,10 +37,10 @@ def get_ths_concept_detail(concept_code, concept_name):
|
|
|
37
37
|
| (ths_concept_list['web_concept_code'] == int(concept_code))]
|
|
38
38
|
if data_frame_util.is_not_empty(ths_concept_one_df):
|
|
39
39
|
concept_name = list(ths_concept_one_df['name'])[0]
|
|
40
|
-
if data_frame_util.is_string_not_empty(concept_name) and concept_name is not None:
|
|
41
|
-
|
|
42
|
-
else:
|
|
43
|
-
|
|
40
|
+
# if data_frame_util.is_string_not_empty(concept_name) and concept_name is not None:
|
|
41
|
+
# concept_detail_by_wen_cai_df = get_ths_concept_detail_by_wen_cai(concept_name, real_time_quotes_all_stocks)
|
|
42
|
+
# else:
|
|
43
|
+
concept_detail_by_wen_cai_df = None
|
|
44
44
|
# 4 通过web端
|
|
45
45
|
ths_concept_detail_from_web_df = get_ths_concept_detail_from_web(concept_code, real_time_quotes_all_stocks)
|
|
46
46
|
# 判断是否都为空
|
|
@@ -218,7 +218,7 @@ def sync_ths_concept_detail_to_db(concept_code, concept_name):
|
|
|
218
218
|
|
|
219
219
|
|
|
220
220
|
if __name__ == '__main__':
|
|
221
|
-
sync_ths_concept_detail_to_db('
|
|
221
|
+
sync_ths_concept_detail_to_db('886090', '智谱AI')
|
|
222
222
|
# real_time_quotes_all_stocks_df = east_money_stock_api.get_real_time_quotes_all_stocks()
|
|
223
223
|
# get_ths_concept_detail_by_explain('886084', real_time_quotes_all_stocks_df)
|
|
224
224
|
# get_ths_concept_detail_from_web('886084', real_time_quotes_all_stocks_df)
|
|
@@ -39,7 +39,7 @@ def sync_ths_concept_new_index_from_app():
|
|
|
39
39
|
# 当前最大概念代码
|
|
40
40
|
max_concept_code = int(ths_concept_sync_common_api.get_max_concept_code())
|
|
41
41
|
# 最大概念代码上限
|
|
42
|
-
max_concept_code_limit =max_concept_code + 2
|
|
42
|
+
max_concept_code_limit = max_concept_code + 2
|
|
43
43
|
# 同花顺概念列表
|
|
44
44
|
ths_concept_list_exist = ths_concept_common_service_api.get_all_ths_concept()
|
|
45
45
|
# 同步向上3次
|
|
@@ -74,11 +74,14 @@ def sync_ths_concept_new_index_from_app():
|
|
|
74
74
|
'str_now_time': str_now_time,
|
|
75
75
|
'web_concept_code': concept_code,
|
|
76
76
|
'web_concept_url': url,
|
|
77
|
-
'valid': True
|
|
77
|
+
'valid': True,
|
|
78
|
+
'grade': 1,
|
|
79
|
+
'remark': ''
|
|
78
80
|
}
|
|
79
81
|
diff_one_df = pd.DataFrame(new_concept_one, index=[1])
|
|
82
|
+
# 保存新增概念信息
|
|
80
83
|
mongodb_util.save_mongo(diff_one_df, db_name_constant.THS_CONCEPT_LIST)
|
|
81
|
-
# 新增概念信息处理
|
|
84
|
+
# 新增概念信息处理 推送到微信
|
|
82
85
|
ths_concept_sync_common_api.push_msg_to_we_chat_and_redis(concept_code, concept_name,
|
|
83
86
|
url)
|
|
84
87
|
# 同步概念详情到db
|
|
@@ -134,7 +137,9 @@ def sync_ths_concept_new_index_from_detail():
|
|
|
134
137
|
'str_now_time': str_now_time,
|
|
135
138
|
'web_concept_code': concept_code,
|
|
136
139
|
'web_concept_url': url,
|
|
137
|
-
'valid': True
|
|
140
|
+
'valid': True,
|
|
141
|
+
'grade': 1,
|
|
142
|
+
'remark': ''
|
|
138
143
|
}
|
|
139
144
|
diff_one_df = pd.DataFrame(new_concept_one, index=[1])
|
|
140
145
|
mongodb_util.save_mongo(diff_one_df, db_name_constant.THS_CONCEPT_LIST)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import sys
|
|
3
3
|
import mns_common.api.ths.concept.web.ths_concept_detail_web as ths_concept_detail_web
|
|
4
|
-
import mns_common.
|
|
4
|
+
import mns_common.component.em.em_stock_info_api as em_stock_info_api
|
|
5
5
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
6
6
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
7
7
|
from loguru import logger
|
|
@@ -157,7 +157,7 @@ def update_symbol_new_concept(symbol_df, page_number):
|
|
|
157
157
|
|
|
158
158
|
def sync_symbol_all_concept(symbol):
|
|
159
159
|
create_index()
|
|
160
|
-
real_time_quotes_now =
|
|
160
|
+
real_time_quotes_now = em_stock_info_api.get_a_stock_info()
|
|
161
161
|
real_time_quotes_now = common_service_fun_api.classify_symbol(real_time_quotes_now)
|
|
162
162
|
if symbol is not None:
|
|
163
163
|
real_time_quotes_now = real_time_quotes_now.loc[real_time_quotes_now['symbol'] == symbol]
|
|
@@ -183,4 +183,4 @@ def sync_symbol_all_concept(symbol):
|
|
|
183
183
|
|
|
184
184
|
|
|
185
185
|
if __name__ == '__main__':
|
|
186
|
-
sync_symbol_all_concept(
|
|
186
|
+
sync_symbol_all_concept('831175')
|
|
@@ -70,7 +70,7 @@ def sync_col_move(str_day):
|
|
|
70
70
|
try:
|
|
71
71
|
db_export('127.0.0.1:27017', str_day)
|
|
72
72
|
db_import('127.0.0.1:27019', str_day)
|
|
73
|
-
|
|
73
|
+
delete_exist_data(str_day)
|
|
74
74
|
except BaseException as e:
|
|
75
75
|
logger.error("备份数据出现错误:{}", e)
|
|
76
76
|
|
|
@@ -115,5 +115,5 @@ if __name__ == '__main__':
|
|
|
115
115
|
|
|
116
116
|
trade_date_list = mongodb_util.find_query_data('trade_date_list', query_trade)
|
|
117
117
|
for trade_one in trade_date_list.itertuples():
|
|
118
|
-
|
|
119
|
-
sync_col_move(
|
|
118
|
+
trade_date_move = trade_one.trade_date
|
|
119
|
+
sync_col_move(trade_date_move)
|
|
@@ -0,0 +1,34 @@
|
|
|
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 loguru import logger
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def db_export(db, col):
|
|
12
|
+
cmd = 'F:/mongo/bin/mongodump.exe --host ' + db + ' -d patience -c ' + col + ' -o D:/back'
|
|
13
|
+
os.system(cmd)
|
|
14
|
+
logger.info("export finished:{}", col)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def db_import(db, col):
|
|
18
|
+
cmd = 'F:/mongo/bin/mongorestore.exe --host ' + db + ' -d patience -c ' + col + ' D:/back/patience/' + col + '.bson'
|
|
19
|
+
os.system(cmd)
|
|
20
|
+
|
|
21
|
+
path = 'D:\\back\\patience\\' + col + '.bson'
|
|
22
|
+
cmd_del = 'del /F /S /Q ' + path
|
|
23
|
+
os.system(cmd_del)
|
|
24
|
+
|
|
25
|
+
logger.info("import finished:{}", col)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def handle_one_col(col_name):
|
|
29
|
+
db_export('127.0.0.1:27017', col_name)
|
|
30
|
+
db_import('127.0.0.1:27019', col_name)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
if __name__ == '__main__':
|
|
34
|
+
handle_one_col('one_minute_k_line_bfq_h')
|
|
@@ -2,23 +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
8
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
9
9
|
from mns_scheduler.db.script.sync.remote_mongo_util import RemoteMongodbUtil
|
|
10
10
|
from mns_scheduler.db.script.sync.local_mongo_util import LocalMongodbUtil
|
|
11
11
|
from loguru import logger
|
|
12
|
+
import numpy as np
|
|
12
13
|
|
|
13
14
|
remote_mongodb_util = RemoteMongodbUtil('27017')
|
|
14
15
|
local_mongodb_util = LocalMongodbUtil('27017')
|
|
15
16
|
|
|
16
17
|
col_list = [
|
|
18
|
+
'em_a_stock_info',
|
|
19
|
+
'em_etf_info',
|
|
20
|
+
'em_kzz_info',
|
|
21
|
+
'em_hk_stock_info',
|
|
22
|
+
'company_info',
|
|
17
23
|
'company_remark_info',
|
|
18
24
|
'company_holding_info',
|
|
19
25
|
'industry_concept_remark',
|
|
20
26
|
'trade_date_list',
|
|
21
|
-
'company_info',
|
|
22
27
|
'de_list_stock',
|
|
23
28
|
'kpl_best_choose_index',
|
|
24
29
|
'kpl_best_choose_index_detail',
|
|
@@ -29,8 +34,11 @@ col_list = [
|
|
|
29
34
|
'self_choose_stock',
|
|
30
35
|
'stock_account_info',
|
|
31
36
|
'ths_concept_list',
|
|
32
|
-
'
|
|
33
|
-
'ths_stock_concept_detail'
|
|
37
|
+
'stock_zt_pool_five',
|
|
38
|
+
'ths_stock_concept_detail',
|
|
39
|
+
'stock_high_chg_pool',
|
|
40
|
+
'today_new_concept_list',
|
|
41
|
+
'ths_stock_concept_detail_app'
|
|
34
42
|
]
|
|
35
43
|
|
|
36
44
|
|
|
@@ -41,6 +49,8 @@ def remote_data():
|
|
|
41
49
|
if data_frame_util.is_not_empty(col_df):
|
|
42
50
|
result = local_mongodb_util.remove_all_data(col)
|
|
43
51
|
if result.acknowledged:
|
|
52
|
+
col_df.replace([np.inf, -np.inf], 0, inplace=True)
|
|
53
|
+
|
|
44
54
|
local_mongodb_util.save_mongo(col_df, col)
|
|
45
55
|
|
|
46
56
|
logger.info("同步集合完成:{}", col)
|
|
@@ -48,5 +58,48 @@ def remote_data():
|
|
|
48
58
|
logger.error("同步失败:{},{}", e, col)
|
|
49
59
|
|
|
50
60
|
|
|
61
|
+
def sync_zt_data(str_day):
|
|
62
|
+
col = 'stock_zt_pool'
|
|
63
|
+
try:
|
|
64
|
+
query = {'str_day': str_day}
|
|
65
|
+
col_df = remote_mongodb_util.find_query_data(col, query)
|
|
66
|
+
if data_frame_util.is_not_empty(col_df):
|
|
67
|
+
col_df.replace([np.inf, -np.inf], 0, inplace=True)
|
|
68
|
+
local_mongodb_util.save_mongo(col_df, col)
|
|
69
|
+
|
|
70
|
+
logger.info("同步集合完成:{}", col)
|
|
71
|
+
except BaseException as e:
|
|
72
|
+
logger.error("同步失败:{},{}", e, col)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def sync_open_data():
|
|
76
|
+
query = {"$and": [{'trade_date': {"$gte": "2025-03-21"}}, {'trade_date': {"$lte": "2025-04-02"}}]}
|
|
77
|
+
trade_date_list_df = remote_mongodb_util.find_query_data('trade_date_list', query)
|
|
78
|
+
trade_date_list_df = trade_date_list_df.sort_values(by=['trade_date'], ascending=False)
|
|
79
|
+
for trade_date_one in trade_date_list_df.itertuples():
|
|
80
|
+
try:
|
|
81
|
+
trade_date = trade_date_one.trade_date
|
|
82
|
+
query_01 = {"str_day": trade_date}
|
|
83
|
+
realtime_quotes_now_open_df = remote_mongodb_util.find_query_data('realtime_quotes_now_open', query_01)
|
|
84
|
+
if 'ths_concept_list' in realtime_quotes_now_open_df.columns:
|
|
85
|
+
del realtime_quotes_now_open_df['ths_concept_list']
|
|
86
|
+
local_mongodb_util.insert_mongo(realtime_quotes_now_open_df, 'realtime_quotes_now_open')
|
|
87
|
+
logger.info("同步到:{}", trade_date)
|
|
88
|
+
except BaseException as e:
|
|
89
|
+
logger.error("同步异常:{}", e)
|
|
90
|
+
return trade_date_list_df
|
|
91
|
+
|
|
92
|
+
|
|
51
93
|
if __name__ == '__main__':
|
|
94
|
+
sync_zt_data('2025-09-17')
|
|
95
|
+
# sync_zt_data('2025-09-02')
|
|
52
96
|
remote_data()
|
|
97
|
+
# sync_zt_data('2025-08-26')
|
|
98
|
+
# sync_zt_data('2025-08-25')
|
|
99
|
+
# sync_zt_data('2025-08-26')
|
|
100
|
+
# remote_data()
|
|
101
|
+
# sync_zt_data('2025-07-23')
|
|
102
|
+
# sync_zt_data('2025-07-24')
|
|
103
|
+
# sync_zt_data('2025-07-25')
|
|
104
|
+
# sync_open_data()
|
|
105
|
+
# remote_data()
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
from mns_scheduler.db.script.sync.remote_mongo_util import RemoteMongodbUtil
|
|
10
|
+
from mns_scheduler.db.script.sync.local_mongo_util import LocalMongodbUtil
|
|
11
|
+
from loguru import logger
|
|
12
|
+
|
|
13
|
+
remote_mongodb_util = RemoteMongodbUtil('27017')
|
|
14
|
+
local_mongodb_util = LocalMongodbUtil('27017')
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def create_index(db_name):
|
|
18
|
+
local_mongodb_util.create_index(db_name, [("symbol", 1)])
|
|
19
|
+
|
|
20
|
+
local_mongodb_util.create_index(db_name, [("str_now_date", 1)])
|
|
21
|
+
|
|
22
|
+
local_mongodb_util.create_index(db_name, [("symbol", 1), ("number", 1)])
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def sync_real_time_data(str_day, min_number, max_number):
|
|
26
|
+
db_name = 'realtime_quotes_now_' + str_day
|
|
27
|
+
# 创建索引
|
|
28
|
+
create_index(db_name)
|
|
29
|
+
while min_number <= max_number:
|
|
30
|
+
query = {'number': min_number}
|
|
31
|
+
data_df = remote_mongodb_util.find_query_data(db_name, query)
|
|
32
|
+
local_mongodb_util.insert_mongo(data_df, db_name)
|
|
33
|
+
min_number = min_number + 1
|
|
34
|
+
logger.info(min_number)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def sync_k_line(str_day):
|
|
38
|
+
query = {"str_day": str_day}
|
|
39
|
+
db_name = 'k_line_info'
|
|
40
|
+
data_df = remote_mongodb_util.find_query_data(db_name, query)
|
|
41
|
+
try:
|
|
42
|
+
local_mongodb_util.insert_mongo(data_df, db_name)
|
|
43
|
+
except BaseException as e:
|
|
44
|
+
logger.error("出现异常:{}", e)
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
if __name__ == '__main__':
|
|
49
|
+
str_day_01 = '2025-09-10'
|
|
50
|
+
sync_k_line(str_day_01)
|
|
51
|
+
|
|
52
|
+
# sync_real_time_data(str_day_01, 1, 2500)
|
|
53
|
+
|
|
54
|
+
# sync_k_line(str_day_01)
|
|
55
|
+
# sync_k_line('2024-11-13')
|
|
56
|
+
# sync_k_line('2024-11-12')
|
|
57
|
+
# sync_k_line('2024-11-15') 232
|
|
58
|
+
|
|
59
|
+
# sync_real_time_data('2024-11-15', 10, 1010)
|
|
60
|
+
|
|
61
|
+
# sync_k_line('2024-12-20')
|
|
62
|
+
# sync_k_line('2024-12-19')
|
|
63
|
+
# sync_k_line('2024-12-18')
|
|
64
|
+
# sync_k_line('2024-12-17')
|
|
65
|
+
# sync_k_line('2024-12-16')
|
|
66
|
+
#
|
|
67
|
+
# sync_k_line('2024-12-13')
|
|
68
|
+
# sync_k_line('2024-12-12')
|
|
69
|
+
# sync_k_line('2024-12-11')
|
|
70
|
+
# sync_k_line('2024-12-10')
|
|
71
|
+
# sync_k_line('2024-12-09')
|
|
72
|
+
#
|
|
73
|
+
# sync_k_line('2024-12-06')
|
|
74
|
+
# sync_k_line('2024-12-05')
|
|
75
|
+
# sync_k_line('2024-12-04')
|
|
76
|
+
# sync_k_line('2024-12-03')
|
|
77
|
+
# sync_k_line('2024-12-02')
|
|
78
|
+
|
|
79
|
+
# sync_real_time_data('2024-12-20', 1000, 2000)
|
|
80
|
+
# sync_real_time_data('2024-11-13', 10, 1010)
|