mns-scheduler 1.2.3.6__py3-none-any.whl → 1.2.3.8__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.
Potentially problematic release.
This version of mns-scheduler might be problematic. Click here for more details.
- mns_scheduler/company_info/base/sync_company_base_info_api.py +6 -7
- mns_scheduler/company_info/clean/company_info_clean_api.py +31 -11
- mns_scheduler/company_info/constant/company_constant_data.py +208 -146
- mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +1 -1
- 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/zz_task/data_sync_task.py +13 -2
- {mns_scheduler-1.2.3.6.dist-info → mns_scheduler-1.2.3.8.dist-info}/METADATA +1 -1
- {mns_scheduler-1.2.3.6.dist-info → mns_scheduler-1.2.3.8.dist-info}/RECORD +13 -9
- {mns_scheduler-1.2.3.6.dist-info → mns_scheduler-1.2.3.8.dist-info}/WHEEL +0 -0
- {mns_scheduler-1.2.3.6.dist-info → mns_scheduler-1.2.3.8.dist-info}/top_level.txt +0 -0
|
@@ -162,12 +162,11 @@ def single_thread_sync_company_info(east_money_stock_info,
|
|
|
162
162
|
lambda x: x[1:5] + '00')
|
|
163
163
|
company_info_type['third_industry_code'] = company_info_type['hy3code'].apply(
|
|
164
164
|
lambda x: x[1:7])
|
|
165
|
-
|
|
166
|
-
company_info_type['
|
|
167
|
-
company_info_type['
|
|
168
|
-
company_info_type['
|
|
169
|
-
|
|
170
|
-
|
|
165
|
+
# company_info_type['main_business_list'] = company_info_type['main_business_list']
|
|
166
|
+
# company_info_type['most_profitable_business'] = company_info_type['most_profitable_business']
|
|
167
|
+
# company_info_type['most_profitable_business_rate'] = company_info_type['most_profitable_business_rate']
|
|
168
|
+
# company_info_type['most_profitable_business_profit'] = company_info_type['most_profitable_business_profit']
|
|
169
|
+
#
|
|
171
170
|
company_info_type['first_sw_industry'] = company_info_type['hy']
|
|
172
171
|
company_info_type['second_sw_industry'] = company_info_type['hy2']
|
|
173
172
|
company_info_type['third_sw_industry'] = company_info_type['hy3']
|
|
@@ -438,5 +437,5 @@ if __name__ == '__main__':
|
|
|
438
437
|
# query = {"total_operate_income": 0}
|
|
439
438
|
# un_report_company_info = mongodb_util.find_query_data(db_name_constant.COMPANY_INFO, query)
|
|
440
439
|
# symbol_list = list(un_report_company_info['symbol'])
|
|
441
|
-
sync_company_base_info(
|
|
440
|
+
sync_company_base_info(None)
|
|
442
441
|
# group_by_industry()
|
|
@@ -13,6 +13,7 @@ import mns_scheduler.company_info.constant.company_constant_data as company_cons
|
|
|
13
13
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
14
14
|
import mns_scheduler.concept.ths.detaill.ths_concept_detail_api as ths_concept_detail_api
|
|
15
15
|
import mns_scheduler.company_info.base.sync_company_base_info_api as company_info_sync_api
|
|
16
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
16
17
|
|
|
17
18
|
mongodb_util = MongodbUtil('27017')
|
|
18
19
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
@@ -20,21 +21,26 @@ import mns_common.component.company.company_common_service_api as company_common
|
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
# 修改行业信息
|
|
23
|
-
def
|
|
24
|
+
def clean_company_info(symbol):
|
|
24
25
|
if symbol is not None:
|
|
25
26
|
query = {"symbol": symbol}
|
|
26
27
|
company_info = mongodb_util.find_query_data('company_info_base', query)
|
|
27
28
|
else:
|
|
28
29
|
company_info = mongodb_util.find_all_data('company_info_base')
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
company_info = company_constant_data.fix_second_industry(company_info)
|
|
32
|
+
|
|
33
|
+
company_info = company_info.set_index(['second_sw_industry'], drop=False)
|
|
34
|
+
|
|
35
|
+
# 修改行业名称
|
|
36
|
+
del company_info['industry']
|
|
32
37
|
# fix industry name
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
industry_final_fix_df = company_constant_data.get_fix_industry_name_df()
|
|
39
|
+
industry_final_fix_df = industry_final_fix_df.set_index(['second_sw_industry'], drop=True)
|
|
40
|
+
company_info = pd.merge(company_info, industry_final_fix_df, how='outer',
|
|
41
|
+
left_index=True, right_index=True)
|
|
42
|
+
|
|
43
|
+
# 将申万第三行业做为行业 拆分过大的二级行业 主要有通用设备 和专业设备
|
|
38
44
|
company_info = company_constant_data.fix_industry_use_sw_third(company_info.copy())
|
|
39
45
|
company_info['industry'] = company_info['industry'].fillna('综合')
|
|
40
46
|
company_info = company_constant_data.filed_sort(company_info)
|
|
@@ -65,7 +71,7 @@ def fix_company_industry(symbol):
|
|
|
65
71
|
except BaseException as e:
|
|
66
72
|
logger.error("出现异常:{},{}", symbol, e)
|
|
67
73
|
query = {'concept_code': 885598}
|
|
68
|
-
ths_stock_concept_detail = mongodb_util.find_query_data(
|
|
74
|
+
ths_stock_concept_detail = mongodb_util.find_query_data(db_name_constant.THS_STOCK_CONCEPT_DETAIL, query)
|
|
69
75
|
sub_stock_symbol_list = list(ths_stock_concept_detail['symbol'])
|
|
70
76
|
company_info.loc[:, 'sub_stock'] = False
|
|
71
77
|
company_info.loc[company_info['symbol'].isin(sub_stock_symbol_list), 'sub_stock'] = True
|
|
@@ -73,6 +79,20 @@ def fix_company_industry(symbol):
|
|
|
73
79
|
try:
|
|
74
80
|
company_info.dropna(subset=['symbol'], axis=0, inplace=True)
|
|
75
81
|
company_info.dropna(subset=['_id'], axis=0, inplace=True)
|
|
82
|
+
ths_stock_industry_detail_df = mongodb_util.find_all_data(db_name_constant.THS_STOCK_INDUSTRY_DETAIL)
|
|
83
|
+
if data_frame_util.is_not_empty(ths_stock_industry_detail_df):
|
|
84
|
+
ths_stock_industry_detail_df = ths_stock_industry_detail_df[
|
|
85
|
+
['symbol', 'ths_industry_name', 'ths_industry_code']]
|
|
86
|
+
ths_stock_industry_detail_df = ths_stock_industry_detail_df.set_index(['symbol'], drop=True)
|
|
87
|
+
company_info = company_info.set_index(['_id'], drop=False)
|
|
88
|
+
company_info = pd.merge(company_info, ths_stock_industry_detail_df, how='outer',
|
|
89
|
+
left_index=True, right_index=True)
|
|
90
|
+
company_info['ths_industry_code'] = company_info['ths_industry_code'].fillna('0')
|
|
91
|
+
company_info['ths_industry_name'] = company_info['ths_industry_name'].fillna('异常')
|
|
92
|
+
|
|
93
|
+
else:
|
|
94
|
+
company_info['ths_industry_code'] = '0'
|
|
95
|
+
company_info['ths_industry_name'] = '异常'
|
|
76
96
|
mongodb_util.save_mongo(company_info, db_name_constant.COMPANY_INFO)
|
|
77
97
|
# 保存历史数据
|
|
78
98
|
save_company_info_his(company_info)
|
|
@@ -102,7 +122,7 @@ def new_company_info_update():
|
|
|
102
122
|
for company_one in new_stock.itertuples():
|
|
103
123
|
try:
|
|
104
124
|
company_info_sync_api.sync_company_base_info([company_one.symbol])
|
|
105
|
-
|
|
125
|
+
clean_company_info(company_one.symbol)
|
|
106
126
|
|
|
107
127
|
except BaseException as e:
|
|
108
128
|
logger.error("出现异常:{}", e)
|
|
@@ -110,4 +130,4 @@ def new_company_info_update():
|
|
|
110
130
|
|
|
111
131
|
|
|
112
132
|
if __name__ == '__main__':
|
|
113
|
-
|
|
133
|
+
clean_company_info(None)
|
|
@@ -59,32 +59,66 @@ def get_fix_symbol_industry():
|
|
|
59
59
|
'new_industry'])
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
#
|
|
63
|
-
def
|
|
64
|
-
return pd.DataFrame([
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
62
|
+
# 修改二级行业分类的股票
|
|
63
|
+
def get_fix_second_industry_info():
|
|
64
|
+
return pd.DataFrame([
|
|
65
|
+
['110200', '渔业', "农林牧渔", "110000", '农业综合Ⅱ', '110900'],
|
|
66
|
+
|
|
67
|
+
['110300', '林业', "农林牧渔", "110000", '农业综合Ⅱ', '110900'],
|
|
68
|
+
|
|
69
|
+
['450700', '旅游零售Ⅱ', '社会服务', '460000', '旅游及景区', '461000'],
|
|
70
|
+
|
|
71
|
+
['220700', '化工新材料Ⅱ', '基础化工', '220000', '非金属材料Ⅱ', '220900'],
|
|
72
|
+
|
|
73
|
+
['330700', '其他家电Ⅱ', '家用电器', '330000', '小家电', '330300'],
|
|
74
|
+
|
|
75
|
+
['250100', '建筑材料', '建筑材料', '610000', '装修建材', '610300'],
|
|
76
|
+
|
|
77
|
+
['460600', '体育Ⅱ', '综合', '510000', '综合Ⅱ', '510100'],
|
|
70
78
|
|
|
79
|
+
['770300', '医疗美容', '美容护理', '770000', '化妆品', '770200'],
|
|
71
80
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
81
|
+
],
|
|
82
|
+
columns=['original_second_industry_code',
|
|
83
|
+
'original_second_industry_name',
|
|
84
|
+
'first_sw_industry',
|
|
85
|
+
'first_industry_code',
|
|
86
|
+
'second_sw_industry', # 二级级行业代码
|
|
87
|
+
'second_industry_code'])
|
|
75
88
|
|
|
76
89
|
|
|
77
|
-
|
|
78
|
-
|
|
90
|
+
def fix_second_industry(company_info):
|
|
91
|
+
fix_second_industry_df = get_fix_second_industry_info()
|
|
92
|
+
del fix_second_industry_df['original_second_industry_name']
|
|
93
|
+
fix_second_company_df = company_info.loc[
|
|
94
|
+
company_info['second_industry_code'].isin(fix_second_industry_df['original_second_industry_code'])]
|
|
95
|
+
|
|
96
|
+
no_fix_second_company_df = company_info.loc[~(
|
|
97
|
+
company_info['second_industry_code'].isin(fix_second_industry_df['original_second_industry_code']))]
|
|
98
|
+
|
|
99
|
+
fix_second_company_df = fix_second_company_df.set_index(['second_industry_code'], drop=True)
|
|
100
|
+
del fix_second_company_df['second_sw_industry']
|
|
101
|
+
del fix_second_company_df['first_industry_code']
|
|
102
|
+
del fix_second_company_df['first_sw_industry']
|
|
103
|
+
fix_second_industry_df = fix_second_industry_df.set_index(['original_second_industry_code'], drop=True)
|
|
104
|
+
|
|
105
|
+
fix_second_company_df = pd.merge(fix_second_company_df, fix_second_industry_df, how='outer',
|
|
106
|
+
left_index=True, right_index=True)
|
|
107
|
+
|
|
108
|
+
return pd.concat([no_fix_second_company_df, fix_second_company_df])
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
# 修改行业名
|
|
112
|
+
def get_fix_industry_name_df():
|
|
79
113
|
return pd.DataFrame([
|
|
80
114
|
|
|
81
|
-
# 交通运输
|
|
115
|
+
# 交通运输 1
|
|
82
116
|
['物流', '物流'],
|
|
83
117
|
['铁路公路', '铁路公路'],
|
|
84
118
|
['航运港口', '航运港口'],
|
|
85
119
|
['航空机场', '航空机场'],
|
|
86
120
|
|
|
87
|
-
# 传媒
|
|
121
|
+
# 传媒 2
|
|
88
122
|
['数字媒体', '数字媒体'],
|
|
89
123
|
['电视广播Ⅱ', '电视广播'],
|
|
90
124
|
['游戏Ⅱ', '游戏'],
|
|
@@ -92,22 +126,21 @@ def get_industry_final_fix_df():
|
|
|
92
126
|
['影视院线', '影视院线'],
|
|
93
127
|
['广告营销', '广告营销'],
|
|
94
128
|
|
|
95
|
-
# 公用事业
|
|
129
|
+
# 公用事业 3
|
|
96
130
|
['燃气Ⅱ', '燃气'],
|
|
97
131
|
['电力', '电力'],
|
|
98
132
|
|
|
99
|
-
# 农林牧渔
|
|
100
|
-
['养殖业', '养殖业'],
|
|
101
|
-
['农产品加工', '农产品加工'],
|
|
102
|
-
['饲料', '饲料'],
|
|
103
|
-
['渔业', '渔业'], # merge to
|
|
104
|
-
# merge 农林牧渔
|
|
133
|
+
# 农林牧渔 4
|
|
134
|
+
['养殖业', '养殖业'],
|
|
135
|
+
['农产品加工', '农产品加工'],
|
|
136
|
+
['饲料', '饲料'],
|
|
137
|
+
['渔业', '渔业'], # merge to 农业综合
|
|
105
138
|
['动物保健Ⅱ', '动物保健'],
|
|
106
139
|
['种植业', '种植业'],
|
|
107
|
-
['林业Ⅱ', '林业'], # merge
|
|
108
|
-
['农业综合Ⅱ', '农业综合'], #
|
|
140
|
+
# ['林业Ⅱ', '林业'], # merge 农业综合
|
|
141
|
+
['农业综合Ⅱ', '农业综合'], #
|
|
109
142
|
|
|
110
|
-
# 医药生物
|
|
143
|
+
# 医药生物 5
|
|
111
144
|
['化学制药', '化学制药'],
|
|
112
145
|
['生物制品', '生物制品'],
|
|
113
146
|
['中药Ⅱ', '中药'],
|
|
@@ -115,46 +148,85 @@ def get_industry_final_fix_df():
|
|
|
115
148
|
['医疗服务', '医疗服务'],
|
|
116
149
|
['医药商业', '医药商业'],
|
|
117
150
|
|
|
118
|
-
# 商贸零售
|
|
151
|
+
# 商贸零售 6
|
|
119
152
|
['一般零售', '一般零售'],
|
|
120
153
|
['互联网电商', '互联网电商'],
|
|
121
154
|
['贸易Ⅱ', '贸易'], #
|
|
122
|
-
['专业连锁Ⅱ', '
|
|
123
|
-
['旅游零售Ⅱ', '旅游零售'], #
|
|
155
|
+
['专业连锁Ⅱ', '零售专业连锁'], # 专业连锁 综合Ⅱ
|
|
156
|
+
# ['旅游零售Ⅱ', '旅游零售'], # merge旅游及景区
|
|
124
157
|
|
|
125
|
-
# 国防
|
|
126
|
-
['军工电子Ⅱ', '军工电子'],
|
|
127
|
-
['地面兵装Ⅱ', '地面兵装'],
|
|
158
|
+
# 国防 7
|
|
159
|
+
['军工电子Ⅱ', '军工电子'],
|
|
160
|
+
['地面兵装Ⅱ', '地面兵装'],
|
|
128
161
|
['航天装备Ⅱ', '航天装备'],
|
|
129
|
-
['航空装备Ⅱ', '航空装备'],
|
|
162
|
+
['航空装备Ⅱ', '航空装备'],
|
|
130
163
|
['航海装备Ⅱ', '航海装备'],
|
|
131
164
|
|
|
132
|
-
# 基础化工
|
|
165
|
+
# 基础化工 8
|
|
133
166
|
['化学制品', '化学制品'],
|
|
134
167
|
['化学原料', '化学原料'],
|
|
135
168
|
['化学纤维', '化学纤维'],
|
|
136
169
|
['农化制品', '化肥农药'],
|
|
137
170
|
['塑料', '塑料'],
|
|
138
|
-
['橡胶', '橡胶'],
|
|
171
|
+
['橡胶', '橡胶'],
|
|
139
172
|
['非金属材料Ⅱ', '非金属材料'],
|
|
140
173
|
|
|
141
|
-
# 家用电器
|
|
174
|
+
# 家用电器 9
|
|
142
175
|
['白色家电', '白色家电'], # merge 家用电器
|
|
143
176
|
['照明设备Ⅱ', '照明设备'], # merge 家用电器
|
|
144
|
-
['其他家电Ⅱ', '其他家电'], # merge
|
|
177
|
+
# ['其他家电Ⅱ', '其他家电'], # merge 小家电
|
|
145
178
|
['家电零部件Ⅱ', '家电零部件'], # merge 家用电器
|
|
146
179
|
['小家电', '小家电'], # merge '家用电器'
|
|
147
180
|
['黑色家电', '黑色家电'], # merge 家用电器
|
|
148
181
|
['厨卫电器', '厨卫电器'], # merge 家用电器
|
|
149
182
|
|
|
150
|
-
#
|
|
183
|
+
# 建筑材料 10
|
|
184
|
+
['装修建材', '装修建材'], #
|
|
185
|
+
['建筑建材', '装修建材'], #
|
|
186
|
+
['玻璃玻纤', '玻璃玻纤'],
|
|
187
|
+
['水泥', '水泥'],
|
|
188
|
+
|
|
189
|
+
# 建筑装饰 11
|
|
190
|
+
['基础建设', '基础建设'],
|
|
191
|
+
['房屋建设Ⅱ', '房屋建设'],
|
|
192
|
+
['工程咨询服务Ⅱ', '工程咨询服务'],
|
|
193
|
+
['专业工程', '建筑专业工程'],
|
|
194
|
+
['装修装饰Ⅱ', '装修装饰'],
|
|
195
|
+
|
|
196
|
+
# 房地产 12
|
|
197
|
+
['房地产开发', '房地产'],
|
|
198
|
+
['房地产服务', '房地产'],
|
|
199
|
+
|
|
200
|
+
# 有色金属 13
|
|
201
|
+
['能源金属', '能源金属'],
|
|
202
|
+
['小金属', '小金属'],
|
|
203
|
+
['贵金属', '贵金属'], #
|
|
204
|
+
['金属新材料', '金属新材料'],
|
|
205
|
+
['工业金属', '工业金属'], # 铅锌 铝 铜
|
|
206
|
+
|
|
207
|
+
# 机械设备 14
|
|
208
|
+
['自动化设备', '自动化设备'],
|
|
209
|
+
['轨交设备Ⅱ', '轨交设备'],
|
|
210
|
+
['通用设备', '通用设备'],
|
|
211
|
+
['专用设备', '专用设备'],
|
|
212
|
+
['工程机械', '工程机械'],
|
|
213
|
+
|
|
214
|
+
# 汽车 15
|
|
151
215
|
['汽车零部件', '汽车零部件'],
|
|
152
216
|
['汽车服务', '汽车服务'],
|
|
153
|
-
['乘用车', '
|
|
154
|
-
['商用车', '
|
|
217
|
+
['乘用车', '乘用车'], # = merge 汽车整车
|
|
218
|
+
['商用车', '商用车'],
|
|
155
219
|
['摩托车及其他', '摩托车及其他'],
|
|
156
220
|
|
|
157
|
-
#
|
|
221
|
+
# 煤炭 16
|
|
222
|
+
['焦炭Ⅱ', '焦炭'], # merge to 煤炭
|
|
223
|
+
['煤炭开采', '煤炭开采'], # merge 煤炭
|
|
224
|
+
|
|
225
|
+
# 环保 17
|
|
226
|
+
['环境治理', '环境治理'], # merge, 环保
|
|
227
|
+
['环保设备Ⅱ', '环保设备'], # merge '环保'
|
|
228
|
+
|
|
229
|
+
# 电力设备 18
|
|
158
230
|
['电网设备', '电网设备'],
|
|
159
231
|
['电池', '电池'],
|
|
160
232
|
['电机Ⅱ', '电机'], #
|
|
@@ -162,20 +234,7 @@ def get_industry_final_fix_df():
|
|
|
162
234
|
['风电设备', '风电设备'],
|
|
163
235
|
['其他电源设备Ⅱ', '其他电源设备'],
|
|
164
236
|
|
|
165
|
-
#
|
|
166
|
-
['房地产开发', '房地产'],
|
|
167
|
-
['房地产服务', '房地产'],
|
|
168
|
-
|
|
169
|
-
# 计算机 联动板块
|
|
170
|
-
['计算机设备', '计算机设备'],
|
|
171
|
-
['IT服务Ⅱ', 'IT服务'],
|
|
172
|
-
['软件开发', '软件开发'],
|
|
173
|
-
|
|
174
|
-
# 环保
|
|
175
|
-
['环境治理', '环保'], # merge, 环保
|
|
176
|
-
['环保设备Ⅱ', '环保'], # merge '环保'
|
|
177
|
-
|
|
178
|
-
# 电子
|
|
237
|
+
# 电子 19
|
|
179
238
|
['半导体', '半导体'],
|
|
180
239
|
['电子化学品Ⅱ', '电子化学品'],
|
|
181
240
|
['光学光电子', '光学光电子'],
|
|
@@ -183,99 +242,69 @@ def get_industry_final_fix_df():
|
|
|
183
242
|
['元件', '元件'],
|
|
184
243
|
['其他电子Ⅱ', '其他电子'], #
|
|
185
244
|
|
|
186
|
-
#
|
|
187
|
-
['证券Ⅱ', '证券'],
|
|
188
|
-
['国有大型银行Ⅱ', '银行'], # merge to 银行
|
|
189
|
-
['城商行Ⅱ', '银行'], #
|
|
190
|
-
['农商行Ⅱ', '银行'], # merge 银行
|
|
191
|
-
['股份制银行Ⅱ', '银行'], # merge to 银行
|
|
192
|
-
['保险Ⅱ', '保险'],
|
|
193
|
-
['多元金融', '多元金融'],
|
|
194
|
-
|
|
195
|
-
# 通信
|
|
196
|
-
['通信服务', '通信服务'],
|
|
197
|
-
['通信设备', '通信设备'],
|
|
198
|
-
|
|
199
|
-
# 酒 喝死你
|
|
200
|
-
['白酒Ⅱ', '酒类'], # merge '酒类'
|
|
201
|
-
['非白酒', '酒类'], # merge '酒类'
|
|
202
|
-
|
|
203
|
-
# 轻工制造
|
|
204
|
-
['造纸', '造纸'],
|
|
205
|
-
['包装印刷', '包装印刷'], #
|
|
206
|
-
['文娱用品', '文娱用品'], #
|
|
207
|
-
['家居用品', '家居用品'],
|
|
208
|
-
|
|
209
|
-
# 纺织服装
|
|
210
|
-
['服装家纺', '纺织服装'], # merge 纺织服装
|
|
211
|
-
['纺织制造', '纺织服装'], # merge 纺织服装
|
|
212
|
-
['饰品', '饰品'], # todo exclude
|
|
213
|
-
|
|
214
|
-
# 美容护理
|
|
215
|
-
['化妆品', '美容护理'], # merge to 美容护理
|
|
216
|
-
['医疗美容', '美容护理'], # merge 美容护理
|
|
217
|
-
['个护用品', '个护用品'],
|
|
218
|
-
|
|
219
|
-
# 食品饮料
|
|
220
|
-
['饮料乳品', '饮料乳品'], # merge 食品饮料
|
|
221
|
-
['食品加工', '食品加工'], # merge 食品饮料
|
|
222
|
-
['调味发酵品Ⅱ', '调味发酵品'], # merge to 食品饮料
|
|
223
|
-
['休闲食品', '休闲食品'], # merge '食品饮料'
|
|
224
|
-
|
|
225
|
-
# 石油石化
|
|
245
|
+
# 石油石化 20
|
|
226
246
|
['炼化及贸易', '石油行业'], # merge 石油行业
|
|
227
247
|
['油服工程', '采掘行业'], # merge '采掘行业'
|
|
228
248
|
['油气开采Ⅱ', '石油行业'], # merge to 石油行业
|
|
229
249
|
|
|
230
|
-
#
|
|
231
|
-
['
|
|
232
|
-
['
|
|
233
|
-
['
|
|
250
|
+
# 社会服务 21
|
|
251
|
+
['专业服务', '社会专业服务'],
|
|
252
|
+
['旅游及景区', '旅游及景区'],
|
|
253
|
+
['酒店餐饮', '旅游酒店'],
|
|
254
|
+
['教育', '教育'],
|
|
255
|
+
# ['体育Ⅱ', '体育'],
|
|
234
256
|
|
|
235
|
-
#
|
|
236
|
-
['
|
|
237
|
-
['
|
|
238
|
-
['
|
|
239
|
-
['金属新材料', '金属新材料'],
|
|
240
|
-
# 铅锌 铝 铜
|
|
241
|
-
['工业金属', '工业金属'],
|
|
257
|
+
# 纺织服装 22
|
|
258
|
+
['服装家纺', '纺织服装'], # merge 纺织服装
|
|
259
|
+
['纺织制造', '纺织服装'], # merge 纺织服装
|
|
260
|
+
['饰品', '饰品'],
|
|
242
261
|
|
|
243
|
-
#
|
|
244
|
-
['
|
|
245
|
-
['房屋建设Ⅱ', '工程建设'], # merge 工程建设
|
|
246
|
-
['工程咨询服务Ⅱ', '工程咨询服务'],
|
|
247
|
-
['专业工程', '建筑工程'],
|
|
248
|
-
['装修装饰Ⅱ', '装修装饰'],
|
|
249
|
-
['工程机械', '工程机械'],
|
|
262
|
+
# 综合 23
|
|
263
|
+
['综合Ⅱ', '综合'],
|
|
250
264
|
|
|
251
|
-
#
|
|
252
|
-
['
|
|
253
|
-
['
|
|
254
|
-
['
|
|
255
|
-
['水泥', '水泥'],
|
|
265
|
+
# 美容护理 24
|
|
266
|
+
['化妆品', '化妆美容'], # merge to 化妆美容
|
|
267
|
+
# ['医疗美容', '化妆美容'], # merge 化妆美容
|
|
268
|
+
['个护用品', '个护用品'],
|
|
256
269
|
|
|
257
|
-
#
|
|
258
|
-
['
|
|
270
|
+
# 计算机 25
|
|
271
|
+
['计算机设备', '计算机设备'],
|
|
272
|
+
['IT服务Ⅱ', 'IT服务'],
|
|
273
|
+
['软件开发', '软件开发'],
|
|
259
274
|
|
|
260
|
-
|
|
275
|
+
# 轻工制造 26
|
|
276
|
+
['造纸', '造纸'],
|
|
277
|
+
['包装印刷', '包装印刷'], #
|
|
278
|
+
['文娱用品', '文娱用品'], #
|
|
279
|
+
['家居用品', '家居用品'],
|
|
261
280
|
|
|
262
|
-
#
|
|
263
|
-
['
|
|
264
|
-
['
|
|
281
|
+
# 通信 27
|
|
282
|
+
['通信服务', '通信服务'],
|
|
283
|
+
['通信设备', '通信设备'],
|
|
265
284
|
|
|
266
|
-
|
|
285
|
+
# 钢铁 28
|
|
286
|
+
['普钢', '普钢'], #
|
|
287
|
+
['特钢Ⅱ', '特钢'],
|
|
288
|
+
['冶钢原料', '冶钢原料'],
|
|
267
289
|
|
|
268
|
-
|
|
269
|
-
['
|
|
290
|
+
# 银行 29
|
|
291
|
+
['国有大型银行Ⅱ', '银行'], # merge to 银行
|
|
292
|
+
['城商行Ⅱ', '银行'], #
|
|
293
|
+
['农商行Ⅱ', '银行'], # merge 银行
|
|
294
|
+
['股份制银行Ⅱ', '银行'], # merge to 银行
|
|
270
295
|
|
|
271
|
-
#
|
|
272
|
-
|
|
273
|
-
['
|
|
274
|
-
['
|
|
275
|
-
['专业服务', '专业服务'], # todo exclude 无法具体分类
|
|
296
|
+
# 非银金融 30
|
|
297
|
+
['证券Ⅱ', '证券'],
|
|
298
|
+
['保险Ⅱ', '保险'],
|
|
299
|
+
['多元金融', '多元金融'],
|
|
276
300
|
|
|
277
|
-
|
|
278
|
-
['
|
|
301
|
+
# 食品饮料 31
|
|
302
|
+
['饮料乳品', '饮料乳品'], # merge 食品饮料
|
|
303
|
+
['食品加工', '食品加工'], # merge 食品饮料
|
|
304
|
+
['调味发酵品Ⅱ', '调味发酵品'], # merge to 食品饮料
|
|
305
|
+
['休闲食品', '休闲食品'], # merge '食品饮料'
|
|
306
|
+
['白酒Ⅱ', '白酒'],
|
|
307
|
+
['非白酒', '非白酒']
|
|
279
308
|
|
|
280
309
|
], columns=['second_sw_industry', 'industry'])
|
|
281
310
|
|
|
@@ -287,24 +316,65 @@ def fix_industry_use_sw_third(company_info_df):
|
|
|
287
316
|
company_info.loc[company_info.third_industry_code == '240303', 'industry'] = '铅锌'
|
|
288
317
|
company_info.loc[company_info.third_industry_code == '240301', 'industry'] = '铝'
|
|
289
318
|
company_info.loc[company_info.third_industry_code == '240302', 'industry'] = '铜'
|
|
319
|
+
|
|
320
|
+
company_info.loc[company_info.third_industry_code == '240303', 'second_sw_industry'] = '铅锌'
|
|
321
|
+
company_info.loc[company_info.third_industry_code == '240301', 'second_sw_industry'] = '铝'
|
|
322
|
+
company_info.loc[company_info.third_industry_code == '240302', 'second_sw_industry'] = '铜'
|
|
323
|
+
|
|
324
|
+
company_info.loc[company_info.third_industry_code == '240303', 'second_industry_code'] = '240303'
|
|
325
|
+
company_info.loc[company_info.third_industry_code == '240301', 'second_industry_code'] = '240301'
|
|
326
|
+
company_info.loc[company_info.third_industry_code == '240302', 'second_industry_code'] = '240302'
|
|
327
|
+
|
|
290
328
|
# 细分专业设备
|
|
291
329
|
company_info.loc[company_info.third_industry_code == '640203', 'industry'] = '能源及重型设备'
|
|
292
330
|
company_info.loc[company_info.third_industry_code == '640204', 'industry'] = '楼宇设备'
|
|
293
331
|
company_info.loc[company_info.third_industry_code == '640206', 'industry'] = '纺织服装设备'
|
|
294
332
|
company_info.loc[company_info.third_industry_code == '640207', 'industry'] = '农用机械'
|
|
295
333
|
company_info.loc[company_info.third_industry_code == '640208', 'industry'] = '印刷包装机械'
|
|
334
|
+
|
|
335
|
+
company_info.loc[company_info.third_industry_code == '640203', 'second_sw_industry'] = '能源及重型设备'
|
|
336
|
+
company_info.loc[company_info.third_industry_code == '640204', 'second_sw_industry'] = '楼宇设备'
|
|
337
|
+
company_info.loc[company_info.third_industry_code == '640206', 'second_sw_industry'] = '纺织服装设备'
|
|
338
|
+
company_info.loc[company_info.third_industry_code == '640207', 'second_sw_industry'] = '农用机械'
|
|
339
|
+
company_info.loc[company_info.third_industry_code == '640208', 'second_sw_industry'] = '印刷包装机械'
|
|
340
|
+
|
|
341
|
+
company_info.loc[company_info.third_industry_code == '640203', 'second_industry_code'] = '640203'
|
|
342
|
+
company_info.loc[company_info.third_industry_code == '640204', 'second_industry_code'] = '640204'
|
|
343
|
+
company_info.loc[company_info.third_industry_code == '640206', 'second_industry_code'] = '640206'
|
|
344
|
+
company_info.loc[company_info.third_industry_code == '640207', 'second_industry_code'] = '640207'
|
|
345
|
+
company_info.loc[company_info.third_industry_code == '640208', 'second_industry_code'] = '640208'
|
|
346
|
+
|
|
296
347
|
# todo 细分
|
|
297
348
|
company_info.loc[company_info.third_industry_code == '640209', 'industry'] = '专用设备'
|
|
298
|
-
company_info.loc[company_info.third_industry_code == '
|
|
349
|
+
company_info.loc[company_info.third_industry_code == '640209', 'second_sw_industry'] = '专用设备'
|
|
350
|
+
company_info.loc[company_info.third_industry_code == '640209', 'second_industry_code'] = '640208'
|
|
351
|
+
|
|
352
|
+
company_info.loc[company_info.third_industry_code == '260205', 'industry'] = '专用设备'
|
|
353
|
+
company_info.loc[company_info.third_industry_code == '260205', 'second_sw_industry'] = '专用设备'
|
|
354
|
+
company_info.loc[company_info.third_industry_code == '260205', 'second_industry_code'] = '260205'
|
|
355
|
+
|
|
299
356
|
# 细分通用设备
|
|
300
357
|
company_info.loc[company_info.third_industry_code == '640101', 'industry'] = '机床工具'
|
|
301
358
|
company_info.loc[company_info.third_industry_code == '640103', 'industry'] = '磨具磨料'
|
|
302
359
|
company_info.loc[company_info.third_industry_code == '640105', 'industry'] = '制冷空调设备'
|
|
303
360
|
company_info.loc[company_info.third_industry_code == '640106', 'industry'] = '通用设备'
|
|
304
361
|
company_info.loc[company_info.third_industry_code == '640107', 'industry'] = '仪器仪表'
|
|
305
|
-
company_info.loc[company_info.third_industry_code == '640301', 'industry'] = '仪器仪表'
|
|
306
|
-
# todo 细分
|
|
307
362
|
company_info.loc[company_info.third_industry_code == '640108', 'industry'] = '金属制品'
|
|
363
|
+
|
|
364
|
+
company_info.loc[company_info.third_industry_code == '640101', 'second_sw_industry'] = '机床工具'
|
|
365
|
+
company_info.loc[company_info.third_industry_code == '640103', 'second_sw_industry'] = '磨具磨料'
|
|
366
|
+
company_info.loc[company_info.third_industry_code == '640105', 'second_sw_industry'] = '制冷空调设备'
|
|
367
|
+
company_info.loc[company_info.third_industry_code == '640106', 'second_sw_industry'] = '通用设备'
|
|
368
|
+
company_info.loc[company_info.third_industry_code == '640107', 'second_sw_industry'] = '仪器仪表'
|
|
369
|
+
company_info.loc[company_info.third_industry_code == '640108', 'second_sw_industry'] = '金属制品'
|
|
370
|
+
|
|
371
|
+
company_info.loc[company_info.third_industry_code == '640101', 'second_industry_code'] = '640101'
|
|
372
|
+
company_info.loc[company_info.third_industry_code == '640103', 'second_industry_code'] = '640103'
|
|
373
|
+
company_info.loc[company_info.third_industry_code == '640105', 'second_industry_code'] = '640105'
|
|
374
|
+
company_info.loc[company_info.third_industry_code == '640106', 'second_industry_code'] = '640106'
|
|
375
|
+
company_info.loc[company_info.third_industry_code == '640107', 'second_industry_code'] = '640107'
|
|
376
|
+
company_info.loc[company_info.third_industry_code == '640108', 'second_industry_code'] = '640108'
|
|
377
|
+
|
|
308
378
|
return company_info
|
|
309
379
|
|
|
310
380
|
|
|
@@ -351,14 +421,6 @@ def fix_symbol_industry(company_info, symbol):
|
|
|
351
421
|
return company_info
|
|
352
422
|
|
|
353
423
|
|
|
354
|
-
def fix_one_symbol():
|
|
355
|
-
symbol = '300483'
|
|
356
|
-
company_info = mongodb_util.find_query_data('company_info', query={'_id': symbol})
|
|
357
|
-
company_info = fix_symbol_industry(company_info, symbol)
|
|
358
|
-
company_info['industry'] = company_info['second_sw_industry']
|
|
359
|
-
mongodb_util.save_mongo(company_info, 'company_info')
|
|
360
|
-
|
|
361
|
-
|
|
362
424
|
def filed_sort(company_info):
|
|
363
425
|
return company_info[[
|
|
364
426
|
"_id",
|
|
@@ -399,6 +461,7 @@ def filed_sort(company_info):
|
|
|
399
461
|
"ROE",
|
|
400
462
|
"classification",
|
|
401
463
|
"base_business",
|
|
464
|
+
"intro",
|
|
402
465
|
"address",
|
|
403
466
|
"market_id",
|
|
404
467
|
"symbol",
|
|
@@ -423,6 +486,5 @@ def filed_sort(company_info):
|
|
|
423
486
|
|
|
424
487
|
|
|
425
488
|
if __name__ == '__main__':
|
|
426
|
-
|
|
427
|
-
industry_df_test = get_industry_final_fix_df()
|
|
489
|
+
industry_df_test = get_fix_industry_name_df()
|
|
428
490
|
print(industry_df_test)
|
|
@@ -196,7 +196,7 @@ def update_company_info(new_concept_symbol_df):
|
|
|
196
196
|
if new_concept_symbol_df.shape[0] > 0:
|
|
197
197
|
symbol_list = list(new_concept_symbol_df['symbol'])
|
|
198
198
|
company_info_sync_api.sync_company_base_info(symbol_list)
|
|
199
|
-
company_info_clean_api.
|
|
199
|
+
company_info_clean_api.clean_company_info(None)
|
|
200
200
|
# 公司缓存信息清除
|
|
201
201
|
company_common_service_api.company_info_industry_cache_clear()
|
|
202
202
|
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import mns_common.api.ths.concept.app.ths_concept_index_app as ths_concept_index_app
|
|
9
|
+
from datetime import datetime
|
|
10
|
+
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
11
|
+
import mns_common.utils.date_handle_util as date_handle_util
|
|
12
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
13
|
+
import pandas as pd
|
|
14
|
+
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# 通过api 获取ths行业和指数
|
|
18
|
+
def get_ths_index_by_api(query_type):
|
|
19
|
+
now_date = datetime.now()
|
|
20
|
+
hour = now_date.hour
|
|
21
|
+
minute = now_date.minute
|
|
22
|
+
now_str_day = now_date.strftime('%Y-%m-%d')
|
|
23
|
+
|
|
24
|
+
is_trade_day = trade_date_common_service_api.is_trade_day(now_str_day)
|
|
25
|
+
|
|
26
|
+
if bool(1 - is_trade_day):
|
|
27
|
+
last_trade_day = trade_date_common_service_api.get_before_trade_date(now_str_day, 1)
|
|
28
|
+
begin_time = date_handle_util.no_slash_date(last_trade_day) + '093000'
|
|
29
|
+
end_time = date_handle_util.no_slash_date(last_trade_day) + '150000'
|
|
30
|
+
else:
|
|
31
|
+
if hour < 9 or (hour == 9 and minute <= 25):
|
|
32
|
+
last_trade_day = trade_date_common_service_api.get_before_trade_date(now_str_day, 2)
|
|
33
|
+
begin_time = date_handle_util.no_slash_date(last_trade_day) + '093000'
|
|
34
|
+
end_time = date_handle_util.no_slash_date(last_trade_day) + '150000'
|
|
35
|
+
else:
|
|
36
|
+
begin_time = date_handle_util.no_slash_date(now_str_day) + '093000'
|
|
37
|
+
if hour == 9:
|
|
38
|
+
hour = '0' + str(hour)
|
|
39
|
+
end_time = date_handle_util.no_slash_date(now_str_day) + str(hour) + str(minute) + '00'
|
|
40
|
+
elif (hour == 11 and minute >= 30) or (hour == 12):
|
|
41
|
+
end_time = date_handle_util.no_slash_date(now_str_day) + '113000'
|
|
42
|
+
elif hour >= 15:
|
|
43
|
+
end_time = date_handle_util.no_slash_date(now_str_day) + '150000'
|
|
44
|
+
else:
|
|
45
|
+
end_time = date_handle_util.no_slash_date(now_str_day) + str(hour) + str(minute) + '00'
|
|
46
|
+
|
|
47
|
+
df = ths_concept_index_app.get_ths_concept_his_info(begin_time, end_time, 500, query_type)
|
|
48
|
+
if data_frame_util.is_empty(df):
|
|
49
|
+
return pd.DataFrame()
|
|
50
|
+
df['turnover'] = round(df['turnover'] / common_service_fun_api.HUNDRED_MILLION, 1)
|
|
51
|
+
df['net_inflow_of_main_force'] = round(df['net_inflow_of_main_force'] / common_service_fun_api.TEN_THOUSAND, 1)
|
|
52
|
+
df.fillna('', inplace=True)
|
|
53
|
+
return df
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
if __name__ == '__main__':
|
|
57
|
+
df_industry = get_ths_index_by_api(1)
|
|
58
|
+
print(df_industry)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import mns_scheduler.industry.ths.ths_industry_index_service as ths_industry_index_service
|
|
9
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
10
|
+
import time
|
|
11
|
+
from datetime import datetime
|
|
12
|
+
from loguru import logger
|
|
13
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
14
|
+
import mns_common.api.ths.concept.app.ths_concept_detail_app as ths_concept_detail_app
|
|
15
|
+
|
|
16
|
+
mongodb_util = MongodbUtil('27017')
|
|
17
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# 同步同花顺行业指数
|
|
21
|
+
def sync_ths_industry_index():
|
|
22
|
+
ths_industry_index_df = ths_industry_index_service.get_ths_index_by_api(1)
|
|
23
|
+
if data_frame_util.is_empty(ths_industry_index_df):
|
|
24
|
+
return None
|
|
25
|
+
ths_industry_index_df['_id'] = ths_industry_index_df['block_code']
|
|
26
|
+
ths_industry_index_df = ths_industry_index_df[[
|
|
27
|
+
'_id',
|
|
28
|
+
'turnover',
|
|
29
|
+
'block_market',
|
|
30
|
+
'block_code',
|
|
31
|
+
'block_name',
|
|
32
|
+
'net_inflow_of_main_force',
|
|
33
|
+
'chg'
|
|
34
|
+
]]
|
|
35
|
+
now_date = datetime.now()
|
|
36
|
+
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
37
|
+
ths_industry_index_df['str_now_date'] = str_now_date
|
|
38
|
+
mongodb_util.save_mongo(ths_industry_index_df, db_name_constant.THS_INDUSTRY_LIST)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def sync_ths_industry_detail():
|
|
42
|
+
ths_industry_list_df = mongodb_util.find_all_data(db_name_constant.THS_INDUSTRY_LIST)
|
|
43
|
+
for industry_one in ths_industry_list_df.itertuples():
|
|
44
|
+
try:
|
|
45
|
+
time.sleep(1)
|
|
46
|
+
now_date = datetime.now()
|
|
47
|
+
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
48
|
+
|
|
49
|
+
ths_industry_symbol_detail_df = ths_concept_detail_app.get_ths_concept_detail_by_app(
|
|
50
|
+
industry_one.block_code)
|
|
51
|
+
ths_industry_symbol_detail_df = ths_industry_symbol_detail_df.rename(
|
|
52
|
+
columns={"concept_code": 'ths_industry_code',
|
|
53
|
+
"concept_name": 'ths_industry_name',
|
|
54
|
+
})
|
|
55
|
+
if data_frame_util.is_empty(ths_industry_symbol_detail_df):
|
|
56
|
+
continue
|
|
57
|
+
ths_industry_symbol_detail_df['str_now_date'] = str_now_date
|
|
58
|
+
ths_industry_symbol_detail_df['_id'] = ths_industry_symbol_detail_df['symbol']
|
|
59
|
+
mongodb_util.save_mongo(ths_industry_symbol_detail_df, db_name_constant.THS_STOCK_INDUSTRY_DETAIL)
|
|
60
|
+
logger.info("同步ths行业股票详情:{}", industry_one.block_name)
|
|
61
|
+
|
|
62
|
+
except BaseException as e:
|
|
63
|
+
logger.error("同步ths行业股票详情异常:{}", e)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
if __name__ == '__main__':
|
|
67
|
+
sync_ths_industry_index()
|
|
68
|
+
sync_ths_industry_detail()
|
|
@@ -56,6 +56,7 @@ import mns_scheduler.hk.hk_industry_info_sync_service_api as hk_industry_info_sy
|
|
|
56
56
|
import mns_scheduler.hk.hk_company_info_sync_service_api as hk_company_info_sync_service_api
|
|
57
57
|
import mns_scheduler.zt.zt_pool.update_null_zt_reason_api as update_null_zt_reason_api
|
|
58
58
|
import mns_scheduler.trade.tfp.stock_tfp_info_sync as stock_tfp_info_sync
|
|
59
|
+
import mns_scheduler.industry.ths.ths_industry_sync_service as ths_industry_sync_service
|
|
59
60
|
|
|
60
61
|
|
|
61
62
|
# 同步交易日期任务完成
|
|
@@ -288,7 +289,7 @@ def sync_new_concept_index_task():
|
|
|
288
289
|
# 清洗公司基本信息
|
|
289
290
|
def update_company_base_info():
|
|
290
291
|
company_info_sync_api.sync_company_base_info(None)
|
|
291
|
-
company_info_clean_api.
|
|
292
|
+
company_info_clean_api.clean_company_info(None)
|
|
292
293
|
# 退市股票同步
|
|
293
294
|
de_list_stock_service.sync_de_list_stock()
|
|
294
295
|
logger.info('同步公司基本信息任务完成')
|
|
@@ -404,6 +405,13 @@ def sync_stock_tfp():
|
|
|
404
405
|
stock_tfp_info_sync.sync_stock_tfp(str_day)
|
|
405
406
|
|
|
406
407
|
|
|
408
|
+
def sync_ths_industry_info():
|
|
409
|
+
logger.info("同步同花顺行业信息开始")
|
|
410
|
+
ths_industry_sync_service.sync_ths_industry_index()
|
|
411
|
+
ths_industry_sync_service.sync_ths_industry_detail()
|
|
412
|
+
logger.info("同步同花顺行业信息完成")
|
|
413
|
+
|
|
414
|
+
|
|
407
415
|
# # 定义BlockingScheduler
|
|
408
416
|
blockingScheduler = BlockingScheduler()
|
|
409
417
|
# sync_trade_date 同步交易日期
|
|
@@ -495,7 +503,7 @@ blockingScheduler.add_job(trader_client_auto_login, 'cron', hour='08,12', minute
|
|
|
495
503
|
# 同步公司备注信息
|
|
496
504
|
blockingScheduler.add_job(sync_company_remark_info, 'cron', hour='22', minute='30')
|
|
497
505
|
# 自选股操作
|
|
498
|
-
blockingScheduler.add_job(self_choose_stock_task, 'cron', hour='17,
|
|
506
|
+
blockingScheduler.add_job(self_choose_stock_task, 'cron', hour='08,17,21', minute='30')
|
|
499
507
|
# 同步财务报表任务
|
|
500
508
|
blockingScheduler.add_job(sync_financial_report_task, 'cron', hour='17', minute='30')
|
|
501
509
|
|
|
@@ -504,6 +512,9 @@ blockingScheduler.add_job(sync_hk_company_industry_info, 'cron', hour='08,15', m
|
|
|
504
512
|
# 更新空的涨停原因股票
|
|
505
513
|
blockingScheduler.add_job(update_null_zt_reason, 'cron', hour='16,17,18,19,20,21,22,23', minute='19')
|
|
506
514
|
|
|
515
|
+
# 同步同花顺行业信息
|
|
516
|
+
blockingScheduler.add_job(sync_ths_industry_info, 'cron', hour='17,22', minute='38')
|
|
517
|
+
|
|
507
518
|
# 同步新公告信息 感觉没有必要同步 直接连接过去查看
|
|
508
519
|
# blockingScheduler.add_job(sync_company_announce, 'cron', hour='07,18,23', minute='33')
|
|
509
520
|
|
|
@@ -7,12 +7,12 @@ mns_scheduler/company_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlI
|
|
|
7
7
|
mns_scheduler/company_info/announce/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
8
8
|
mns_scheduler/company_info/announce/company_announce_sync_service.py,sha256=O0x0dqqnCmzzFenw4fShzWPAi_wegtvAZ9EB0ubrvnM,2808
|
|
9
9
|
mns_scheduler/company_info/base/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
10
|
-
mns_scheduler/company_info/base/sync_company_base_info_api.py,sha256=
|
|
10
|
+
mns_scheduler/company_info/base/sync_company_base_info_api.py,sha256=D6puyEfh0JtS7grQ4OQ1AK2c4eDXlhOHFAOIEfNUMUM,20548
|
|
11
11
|
mns_scheduler/company_info/base/sync_company_hold_info_api.py,sha256=W3Nj9st45efx8cy_42PRTcOXijWKnkO1-ZFRyyfR3S0,1587
|
|
12
12
|
mns_scheduler/company_info/clean/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
13
|
-
mns_scheduler/company_info/clean/company_info_clean_api.py,sha256=
|
|
13
|
+
mns_scheduler/company_info/clean/company_info_clean_api.py,sha256=pDTOowP7byNK2i3XQJhKwLx6YFUq2Az30ckeqe5EEQE,6095
|
|
14
14
|
mns_scheduler/company_info/constant/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
15
|
-
mns_scheduler/company_info/constant/company_constant_data.py,sha256
|
|
15
|
+
mns_scheduler/company_info/constant/company_constant_data.py,sha256=az9oWY6yffa9dSvkwh6P9SZpVgub0GRaafEWrAvnURU,22341
|
|
16
16
|
mns_scheduler/company_info/de_list_stock/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
17
17
|
mns_scheduler/company_info/de_list_stock/de_list_stock_service.py,sha256=GCp6hlvO-SuH1oIpEsYZwEnGUOa6fXb2D7CqAUYXKQA,1993
|
|
18
18
|
mns_scheduler/company_info/remark/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
@@ -23,7 +23,7 @@ mns_scheduler/concept/clean/kpl_concept_clean_api.py,sha256=xxIIgrXLI6xLf10t4unJ
|
|
|
23
23
|
mns_scheduler/concept/clean/ths_concept_clean_api.py,sha256=ICp1g2jP13Px1ett1En05vPzUaB25Usp7r2_L-seRgU,7077
|
|
24
24
|
mns_scheduler/concept/ths/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
25
25
|
mns_scheduler/concept/ths/common/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
26
|
-
mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py,sha256=
|
|
26
|
+
mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py,sha256=uQ-cOBZ7mpYCvYwSvoJXadOqlHnoLvwUaEbm1ccr6Zs,10318
|
|
27
27
|
mns_scheduler/concept/ths/common/ths_concept_update_common_api.py,sha256=4BQT3A9t-nDIyCpILgRZF7ZOgK1oabp-gJl5nyWvKWc,4418
|
|
28
28
|
mns_scheduler/concept/ths/detaill/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
29
|
mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py,sha256=WLXmy6dhKF5GJePDoj-E80KLLMwJHeDYlq8bEhGS4W4,10883
|
|
@@ -55,6 +55,10 @@ mns_scheduler/finance/sync_financial_report_service_api.py,sha256=NTdL2bIpo3-pGC
|
|
|
55
55
|
mns_scheduler/hk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
56
56
|
mns_scheduler/hk/hk_company_info_sync_service_api.py,sha256=yZuJa3hDxudkfjurG4Z0LpA8X5JT6UAKESkVhKRNqx4,3746
|
|
57
57
|
mns_scheduler/hk/hk_industry_info_sync_service_api.py,sha256=HG-_KMQL3irL5pFbrnnv6srFT1Bo04QWwS_Kh3Qg0OU,2403
|
|
58
|
+
mns_scheduler/industry/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
59
|
+
mns_scheduler/industry/ths/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
60
|
+
mns_scheduler/industry/ths/ths_industry_index_service.py,sha256=FcP4J0p3HP2tqD19dNmQfcShTl0hY7Ke7DJWat1MZFE,2686
|
|
61
|
+
mns_scheduler/industry/ths/ths_industry_sync_service.py,sha256=gAzvEG6rHdi0AXmo5vFxeJE81H1bqhE2kMLxZLW0nMQ,2762
|
|
58
62
|
mns_scheduler/irm/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
59
63
|
mns_scheduler/irm/stock_irm_cninfo_service.py,sha256=mTwD7ZYKk9XlA3KD1SQWz2A8-OKAH2mdUl2A9Pzwrz8,9560
|
|
60
64
|
mns_scheduler/irm/api/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
@@ -142,8 +146,8 @@ mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py,sha256=F3IzCFgVPRxyC9j90aLLF1SO3
|
|
|
142
146
|
mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py,sha256=Sy39T-yFwLSIIoSZqQzS-6-W1RlaFWvYpksEXKQVFdI,10456
|
|
143
147
|
mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py,sha256=1uoiR2Uw46kDfjkvNg2US5rd_4OIkYO3872gIJOufUY,2135
|
|
144
148
|
mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
145
|
-
mns_scheduler/zz_task/data_sync_task.py,sha256=
|
|
146
|
-
mns_scheduler-1.2.3.
|
|
147
|
-
mns_scheduler-1.2.3.
|
|
148
|
-
mns_scheduler-1.2.3.
|
|
149
|
-
mns_scheduler-1.2.3.
|
|
149
|
+
mns_scheduler/zz_task/data_sync_task.py,sha256=RIk2ymL9xFQB5OkKWL2NAbTaDzQVaAZ1PkkhgQb9pxI,21669
|
|
150
|
+
mns_scheduler-1.2.3.8.dist-info/METADATA,sha256=SMEQ6g-kjUXCZ0Ii30oesbFqQnOeGw6Dc4dXO9MIABA,64
|
|
151
|
+
mns_scheduler-1.2.3.8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
152
|
+
mns_scheduler-1.2.3.8.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
|
|
153
|
+
mns_scheduler-1.2.3.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|