mns-scheduler 1.1.8.4__py3-none-any.whl → 1.4.5.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mns_scheduler/__init__.py +1 -3
- mns_scheduler/auto_da_ban/auto_da_ban_service.py +89 -0
- mns_scheduler/company_info/clean/__init__.py +1 -1
- mns_scheduler/company_info/clean/company_info_clean_api.py +62 -21
- mns_scheduler/company_info/common/company_common_query_service.py +45 -0
- mns_scheduler/company_info/constant/__init__.py +1 -1
- mns_scheduler/company_info/constant/company_constant_data.py +335 -224
- mns_scheduler/company_info/de_list_stock/__init__.py +1 -1
- mns_scheduler/company_info/de_list_stock/de_list_stock_service.py +1 -1
- mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +134 -0
- mns_scheduler/company_info/sync/company_info_set_service.py +208 -0
- mns_scheduler/company_info/sync/sync_company_info_task.py +203 -0
- mns_scheduler/company_info/task/company_announce_info_task.py +77 -0
- mns_scheduler/company_info/task/company_base_info_task.py +64 -0
- mns_scheduler/company_info/task/company_business_info_task.py +177 -0
- mns_scheduler/company_info/task/company_hold_info_task.py +66 -0
- mns_scheduler/company_info/task/company_industry_info_task.py +167 -0
- mns_scheduler/company_info/task/company_total_task.py +69 -0
- mns_scheduler/concept/clean/kpl_concept_clean_api.py +1 -1
- mns_scheduler/concept/clean/ths_concept_clean_api.py +20 -4
- mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +23 -18
- mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +4 -1
- mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +7 -7
- mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py +9 -4
- mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +2 -2
- mns_scheduler/db/col_move_service.py +3 -3
- mns_scheduler/db/script/__init__.py +1 -1
- mns_scheduler/db/script/col_move_script.py +1 -1
- mns_scheduler/db/script/db_move/__init__.py +7 -0
- mns_scheduler/db/script/db_move/col_move_one_service.py +34 -0
- mns_scheduler/db/script/sync/__init__.py +1 -1
- mns_scheduler/db/script/sync/remote_data_sync_to_local.py +65 -4
- mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +80 -0
- mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +69 -0
- mns_scheduler/db/script/update/__init__.py +7 -0
- mns_scheduler/db/script/update/update_col_field.py +36 -0
- mns_scheduler/finance/__init__.py +1 -1
- mns_scheduler/finance/em/__init__.py +7 -0
- mns_scheduler/finance/{em_financial_asset_liability_sync_service_api.py → em/em_financial_asset_liability_sync_service_api.py} +2 -2
- mns_scheduler/finance/{em_financial_profit_sync_service_api.py → em/em_financial_profit_sync_service_api.py} +27 -26
- mns_scheduler/finance/{finance_common_api.py → em/finance_common_api.py} +3 -3
- mns_scheduler/finance/{sync_financial_report_service_api.py → sync_financial_report_service_task.py} +80 -27
- mns_scheduler/finance/xue_qiu/__init__.py +7 -0
- mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py +77 -0
- mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py +161 -0
- mns_scheduler/hk/__init__.py +1 -1
- mns_scheduler/hk/hk_company_info_sync_service_api.py +4 -4
- mns_scheduler/hk/hk_industry_info_sync_service_api.py +3 -5
- mns_scheduler/industry/__init__.py +7 -0
- mns_scheduler/industry/ths/__init__.py +7 -0
- mns_scheduler/industry/ths/ths_industry_index_service.py +58 -0
- mns_scheduler/industry/ths/ths_industry_sync_service.py +68 -0
- mns_scheduler/irm/__init__.py +1 -1
- mns_scheduler/irm/api/__init__.py +1 -1
- mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +8 -58
- mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +15 -26
- mns_scheduler/irm/stock_irm_cninfo_service.py +43 -31
- mns_scheduler/irm/stock_question_id_service.py +169 -0
- mns_scheduler/k_line/clean/daily/__init__.py +1 -1
- mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +52 -6
- mns_scheduler/k_line/clean/daily/daily_k_line_service.py +7 -2
- mns_scheduler/k_line/clean/k_line_info_clean_impl.py +3 -2
- mns_scheduler/k_line/clean/k_line_info_clean_task.py +42 -15
- mns_scheduler/k_line/clean/week_month/__init__.py +1 -1
- mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +124 -26
- mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +2 -2
- mns_scheduler/k_line/common/__init__.py +7 -0
- mns_scheduler/k_line/common/k_line_common_api.py +188 -0
- mns_scheduler/k_line/hot_stocks/__init__.py +1 -1
- mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +1 -1
- mns_scheduler/k_line/{sync → month_week_daily}/bfq_k_line_sync.py +14 -29
- mns_scheduler/k_line/{sync → month_week_daily}/daily_week_month_line_sync.py +11 -12
- mns_scheduler/k_line/sync_status/__init__.py +7 -0
- mns_scheduler/k_line/sync_status/k_line_sync_status_check.py +54 -0
- mns_scheduler/k_line/test/__init__.py +1 -1
- mns_scheduler/k_line/test/k_line_info_clean_his_data.py +14 -3
- mns_scheduler/k_line/year_quarter/__init__.py +7 -0
- mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +76 -0
- mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +1 -2
- mns_scheduler/kpl/selection/symbol/sync_kpl_concept_symbol_choose_reason_api.py +108 -0
- mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +5 -0
- mns_scheduler/lhb/__init__.py +1 -1
- mns_scheduler/lhb/stock_lhb_sync_service.py +1 -1
- mns_scheduler/open/__init__.py +1 -1
- mns_scheduler/open/sync_one_day_open_data_to_db_service.py +2 -3
- mns_scheduler/risk/__init__.py +1 -1
- mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +8 -2
- mns_scheduler/risk/financial/annual_report_audit_check_api.py +13 -3
- mns_scheduler/risk/financial/net_assets_check_api.py +21 -18
- mns_scheduler/risk/financial/profit_income_check_api.py +7 -2
- mns_scheduler/risk/financial_report_risk_check_api.py +1 -1
- mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py +1 -1
- mns_scheduler/risk/self/wei_pan_stock_api.py +1 -1
- mns_scheduler/risk/test/__init__.py +1 -1
- mns_scheduler/risk/test/fix_blask_list.py +4 -6
- mns_scheduler/risk/transactions/transactions_check_api.py +22 -4
- mns_scheduler/self_choose/__init__.py +1 -1
- mns_scheduler/self_choose/ths_self_choose_service.py +99 -43
- mns_scheduler/trade/auto_login/trader_auto_service.py +7 -4
- mns_scheduler/trade/auto_sell_service_api.py +4 -4
- mns_scheduler/trade/balance/__init__.py +7 -0
- mns_scheduler/trade/balance/ths_account_balance_service.py +7 -0
- mns_scheduler/trade/sync_position_api.py +39 -6
- mns_scheduler/trade/task/trader_task_service.py +38 -10
- mns_scheduler/trade/tfp/__init__.py +7 -0
- mns_scheduler/trade/tfp/stock_tfp_info_sync.py +56 -0
- mns_scheduler/zb/stock_zb_pool_sync.py +1 -16
- mns_scheduler/zt/high_chg/sync_high_chg_pool_service.py +2 -2
- mns_scheduler/zt/high_chg/sync_high_chg_real_time_quotes_service.py +1 -1
- mns_scheduler/zt/script/__init__.py +1 -1
- mns_scheduler/zt/script/fix_error_deal_day.py +41 -0
- mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +2 -2
- mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +2 -2
- mns_scheduler/zt/script/sync_now_higt_chg_zt.py +8 -7
- mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +260 -83
- mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +33 -90
- mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +27 -13
- mns_scheduler/zz_task/compensation/__init__.py +0 -0
- mns_scheduler/zz_task/compensation/compensate_task.py +161 -0
- mns_scheduler/zz_task/compensation/compensate_task_one_day.py +142 -0
- mns_scheduler/zz_task/data_sync_task.py +197 -103
- {mns_scheduler-1.1.8.4.dist-info → mns_scheduler-1.4.5.7.dist-info}/METADATA +1 -1
- mns_scheduler-1.4.5.7.dist-info/RECORD +176 -0
- {mns_scheduler-1.1.8.4.dist-info → mns_scheduler-1.4.5.7.dist-info}/WHEEL +1 -1
- mns_scheduler/2014-2015-test/2014_2015_chg_statistics.py +0 -87
- mns_scheduler/big_deal/ths_big_deal_sync.py +0 -98
- mns_scheduler/company_info/base/sync_company_base_info_api.py +0 -439
- mns_scheduler/company_info/base/sync_company_hold_info_api.py +0 -40
- mns_scheduler/company_info/remark/company_remark_info_sync.py +0 -46
- mns_scheduler/db/real_time_task_check.py +0 -84
- mns_scheduler/debt/kzz_bond_info_sync.py +0 -33
- mns_scheduler-1.1.8.4.dist-info/RECORD +0 -142
- /mns_scheduler/{2014-2015-test → auto_da_ban}/__init__.py +0 -0
- /mns_scheduler/company_info/{base → common}/__init__.py +0 -0
- /mns_scheduler/{big_deal → company_info/em_stock_info}/__init__.py +0 -0
- /mns_scheduler/company_info/{remark → sync}/__init__.py +0 -0
- /mns_scheduler/{debt → company_info/task}/__init__.py +0 -0
- /mns_scheduler/k_line/{sync → month_week_daily}/__init__.py +0 -0
- {mns_scheduler-1.1.8.4.dist-info → mns_scheduler-1.4.5.7.dist-info}/top_level.txt +0 -0
|
@@ -11,7 +11,7 @@ project_path = file_path[0:end]
|
|
|
11
11
|
sys.path.append(project_path)
|
|
12
12
|
mongodb_util = MongodbUtil('27017')
|
|
13
13
|
import mns_common.api.msg.push_msg_api as push_msg_api
|
|
14
|
-
import mns_scheduler.company_info.
|
|
14
|
+
import mns_scheduler.company_info.sync.sync_company_info_task as sync_company_info_task
|
|
15
15
|
import mns_scheduler.company_info.clean.company_info_clean_api as company_info_clean_api
|
|
16
16
|
import mns_scheduler.concept.ths.detaill.ths_concept_detail_api as ths_concept_detail_api
|
|
17
17
|
import mns_common.component.concept.ths_concept_common_service_api as ths_concept_common_service_api
|
|
@@ -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
|
-
|
|
191
|
-
company_info_clean_api.
|
|
195
|
+
sync_company_info_task.sync_company_base_info(symbol_list)
|
|
196
|
+
company_info_clean_api.clean_company_info(symbol_list)
|
|
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]
|
|
@@ -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,32 @@ 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
|
+
'zt_reason_analysis',
|
|
19
|
+
'today_exclude_stocks',
|
|
20
|
+
'today_self_choose_stock',
|
|
21
|
+
'main_line_detail',
|
|
22
|
+
'em_a_stock_info',
|
|
23
|
+
'em_etf_info',
|
|
24
|
+
'em_kzz_info',
|
|
25
|
+
'em_hk_stock_info',
|
|
26
|
+
'company_info',
|
|
17
27
|
'company_remark_info',
|
|
18
28
|
'company_holding_info',
|
|
19
29
|
'industry_concept_remark',
|
|
20
30
|
'trade_date_list',
|
|
21
|
-
'company_info',
|
|
22
31
|
'de_list_stock',
|
|
23
32
|
'kpl_best_choose_index',
|
|
24
33
|
'kpl_best_choose_index_detail',
|
|
@@ -29,8 +38,12 @@ col_list = [
|
|
|
29
38
|
'self_choose_stock',
|
|
30
39
|
'stock_account_info',
|
|
31
40
|
'ths_concept_list',
|
|
32
|
-
'
|
|
33
|
-
'ths_stock_concept_detail'
|
|
41
|
+
'stock_zt_pool_five',
|
|
42
|
+
'ths_stock_concept_detail',
|
|
43
|
+
'stock_high_chg_pool',
|
|
44
|
+
'today_new_concept_list',
|
|
45
|
+
'ths_stock_concept_detail_app',
|
|
46
|
+
|
|
34
47
|
]
|
|
35
48
|
|
|
36
49
|
|
|
@@ -41,6 +54,8 @@ def remote_data():
|
|
|
41
54
|
if data_frame_util.is_not_empty(col_df):
|
|
42
55
|
result = local_mongodb_util.remove_all_data(col)
|
|
43
56
|
if result.acknowledged:
|
|
57
|
+
col_df.replace([np.inf, -np.inf], 0, inplace=True)
|
|
58
|
+
|
|
44
59
|
local_mongodb_util.save_mongo(col_df, col)
|
|
45
60
|
|
|
46
61
|
logger.info("同步集合完成:{}", col)
|
|
@@ -48,5 +63,51 @@ def remote_data():
|
|
|
48
63
|
logger.error("同步失败:{},{}", e, col)
|
|
49
64
|
|
|
50
65
|
|
|
66
|
+
def sync_zt_data(str_day):
|
|
67
|
+
col = 'stock_zt_pool'
|
|
68
|
+
try:
|
|
69
|
+
query = {'str_day': str_day}
|
|
70
|
+
col_df = remote_mongodb_util.find_query_data(col, query)
|
|
71
|
+
if data_frame_util.is_not_empty(col_df):
|
|
72
|
+
col_df.replace([np.inf, -np.inf], 0, inplace=True)
|
|
73
|
+
local_mongodb_util.save_mongo(col_df, col)
|
|
74
|
+
|
|
75
|
+
logger.info("同步集合完成:{}", col)
|
|
76
|
+
except BaseException as e:
|
|
77
|
+
logger.error("同步失败:{},{}", e, col)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def sync_open_data():
|
|
81
|
+
query = {"$and": [{'trade_date': {"$gte": "2025-03-21"}}, {'trade_date': {"$lte": "2025-04-02"}}]}
|
|
82
|
+
trade_date_list_df = remote_mongodb_util.find_query_data('trade_date_list', query)
|
|
83
|
+
trade_date_list_df = trade_date_list_df.sort_values(by=['trade_date'], ascending=False)
|
|
84
|
+
for trade_date_one in trade_date_list_df.itertuples():
|
|
85
|
+
try:
|
|
86
|
+
trade_date = trade_date_one.trade_date
|
|
87
|
+
query_01 = {"str_day": trade_date}
|
|
88
|
+
realtime_quotes_now_open_df = remote_mongodb_util.find_query_data('realtime_quotes_now_open', query_01)
|
|
89
|
+
if 'ths_concept_list' in realtime_quotes_now_open_df.columns:
|
|
90
|
+
del realtime_quotes_now_open_df['ths_concept_list']
|
|
91
|
+
local_mongodb_util.insert_mongo(realtime_quotes_now_open_df, 'realtime_quotes_now_open')
|
|
92
|
+
logger.info("同步到:{}", trade_date)
|
|
93
|
+
except BaseException as e:
|
|
94
|
+
logger.error("同步异常:{}", e)
|
|
95
|
+
return trade_date_list_df
|
|
96
|
+
|
|
97
|
+
|
|
51
98
|
if __name__ == '__main__':
|
|
99
|
+
sync_zt_data('2025-12-21')
|
|
100
|
+
sync_zt_data('2025-12-23')
|
|
101
|
+
sync_zt_data('2025-12-24')
|
|
102
|
+
sync_zt_data('2025-12-25')
|
|
103
|
+
sync_zt_data('2025-12-26')
|
|
52
104
|
remote_data()
|
|
105
|
+
# sync_zt_data('2025-08-26')
|
|
106
|
+
# sync_zt_data('2025-08-25')
|
|
107
|
+
# sync_zt_data('2025-08-26')
|
|
108
|
+
# remote_data()
|
|
109
|
+
# sync_zt_data('2025-07-23')
|
|
110
|
+
# sync_zt_data('2025-07-24')
|
|
111
|
+
# sync_zt_data('2025-07-25')
|
|
112
|
+
# sync_open_data()
|
|
113
|
+
# 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)
|
|
@@ -0,0 +1,69 @@
|
|
|
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.utils.data_frame_util as data_frame_util
|
|
10
|
+
from mns_scheduler.db.script.sync.remote_mongo_util import RemoteMongodbUtil
|
|
11
|
+
from mns_scheduler.db.script.sync.local_mongo_util import LocalMongodbUtil
|
|
12
|
+
from loguru import logger
|
|
13
|
+
import numpy as np
|
|
14
|
+
|
|
15
|
+
remote_mongodb_util = RemoteMongodbUtil('27017')
|
|
16
|
+
local_mongodb_util = LocalMongodbUtil('27017')
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def sync_real_time_data(str_day, min_number, max_number):
|
|
20
|
+
db_name = 'realtime_quotes_now_' + str_day
|
|
21
|
+
while min_number <= max_number:
|
|
22
|
+
query = {'number': min_number}
|
|
23
|
+
data_df = remote_mongodb_util.find_query_data(db_name, query)
|
|
24
|
+
local_mongodb_util.insert_mongo(data_df, db_name)
|
|
25
|
+
min_number = min_number + 1
|
|
26
|
+
logger.info(min_number)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def sync_k_line(str_day):
|
|
30
|
+
query = {"str_day": str_day}
|
|
31
|
+
db_name = 'k_line_info'
|
|
32
|
+
data_df = remote_mongodb_util.find_query_data(db_name, query)
|
|
33
|
+
try:
|
|
34
|
+
local_mongodb_util.save_mongo(data_df, db_name)
|
|
35
|
+
except BaseException as e:
|
|
36
|
+
pass
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
if __name__ == '__main__':
|
|
40
|
+
sync_k_line('2025-08-27')
|
|
41
|
+
# sync_k_line('2025-07-24')
|
|
42
|
+
# sync_k_line('2025-07-25')
|
|
43
|
+
# sync_k_line(str_day_01)
|
|
44
|
+
# sync_k_line('2024-11-13')
|
|
45
|
+
# sync_k_line('2024-11-12')
|
|
46
|
+
# sync_k_line('2024-11-15') 232
|
|
47
|
+
# sync_real_time_data(str_day_01, 1, 2000)
|
|
48
|
+
# sync_real_time_data('2024-11-15', 10, 1010)
|
|
49
|
+
#
|
|
50
|
+
# sync_k_line('2024-12-20')
|
|
51
|
+
# sync_k_line('2024-12-19')
|
|
52
|
+
# sync_k_line('2024-12-18')
|
|
53
|
+
# sync_k_line('2024-12-17')
|
|
54
|
+
# sync_k_line('2024-12-16')
|
|
55
|
+
#
|
|
56
|
+
# sync_k_line('2024-12-13')
|
|
57
|
+
# sync_k_line('2024-12-12')
|
|
58
|
+
# sync_k_line('2024-12-11')
|
|
59
|
+
# sync_k_line('2024-12-10')
|
|
60
|
+
# sync_k_line('2024-12-09')
|
|
61
|
+
#
|
|
62
|
+
# sync_k_line('2024-12-06')
|
|
63
|
+
# sync_k_line('2024-12-05')
|
|
64
|
+
# sync_k_line('2024-12-04')
|
|
65
|
+
# sync_k_line('2024-12-03')
|
|
66
|
+
# sync_k_line('2024-12-02')
|
|
67
|
+
|
|
68
|
+
# sync_real_time_data('2024-12-20', 1000, 2000)
|
|
69
|
+
# sync_real_time_data('2024-11-13', 10, 1010)
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
|
|
11
|
+
mongodb_util_27017 = MongodbUtil('27017')
|
|
12
|
+
mongodb_util_27019 = MongodbUtil('27019')
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def update_col_data():
|
|
16
|
+
query = {"$and": [{'trade_date': {'$lte': '2024-05-23'}},
|
|
17
|
+
{'trade_date': {'$gte': '2022-07-02'}}]}
|
|
18
|
+
trade_date_list_df = mongodb_util_27017.find_query_data('trade_date_list', query)
|
|
19
|
+
trade_date_list_df = trade_date_list_df.sort_values(by=['trade_date'], ascending=True)
|
|
20
|
+
for trade_one in trade_date_list_df.itertuples():
|
|
21
|
+
col_name = 'realtime_quotes_now_' + trade_one.trade_date
|
|
22
|
+
new_values = {'$unset': {
|
|
23
|
+
'classification': '',
|
|
24
|
+
'medium_order_net_inflow': '',
|
|
25
|
+
'small_order_net_inflow': '',
|
|
26
|
+
'str_day': '',
|
|
27
|
+
'list_date': '',
|
|
28
|
+
'amount_level': '',
|
|
29
|
+
'name': '', 'industry': '', 'concept': ''}}
|
|
30
|
+
|
|
31
|
+
mongodb_util_27019.update_many({}, new_values, col_name)
|
|
32
|
+
logger.info("完成集合数据更新:{}", col_name)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
if __name__ == '__main__':
|
|
36
|
+
update_col_data()
|
|
@@ -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
8
|
import akshare as ak
|
|
9
9
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
10
|
-
import mns_scheduler.finance.finance_common_api as finance_common_api
|
|
10
|
+
import mns_scheduler.finance.em.finance_common_api as finance_common_api
|
|
11
11
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
12
12
|
|
|
13
13
|
mongodb_util = MongodbUtil('27017')
|