mns-scheduler 1.4.0.2__py3-none-any.whl → 1.4.0.4__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.

@@ -37,25 +37,89 @@ result = []
37
37
  # 计算实际流通比例
38
38
  def calculate_circulation_ratio(symbol):
39
39
  query = {"symbol": symbol}
40
- stock_gdfx_free_top_10 = mongodb_util.descend_query(query, 'stock_gdfx_free_top_10', "period", 10)
41
- if stock_gdfx_free_top_10.shape[0] == 0:
40
+ stock_gdfx_free_top_1 = mongodb_util.descend_query(query, 'stock_gdfx_free_top_10', "period", 1)
41
+ if stock_gdfx_free_top_1.shape[0] == 0:
42
42
  mv_circulation_ratio = 1
43
43
  else:
44
+ period_time = list(stock_gdfx_free_top_1['period'])[0]
45
+
46
+ query_free = {'symbol': symbol, 'period': period_time}
47
+ stock_gdfx_free_top_10 = mongodb_util.find_query_data('stock_gdfx_free_top_10', query_free)
48
+
49
+ stock_gdfx_free_top_10['shares_number_str'] = stock_gdfx_free_top_10['shares_number'].astype(str)
50
+
51
+ stock_gdfx_free_top_10['id_key'] = stock_gdfx_free_top_10['symbol'] + '_' + stock_gdfx_free_top_10[
52
+ 'period'] + '_' + stock_gdfx_free_top_10.shares_number_str
53
+
54
+ stock_gdfx_free_top_10.drop_duplicates('id_key', keep='last', inplace=True)
55
+
44
56
  # 排除香港结算公司 大于5%减持不用发公告 香港中央结算 HKSCC
45
57
  stock_gdfx_free_top_10['is_hk'] = stock_gdfx_free_top_10['shareholder_name'].apply(
46
58
  lambda shareholder_name: "HK" if shareholder_name.startswith('香港中央结算') or shareholder_name.startswith(
47
59
  'HKSCC') else "A")
48
60
 
49
- # 持股大于5% # 排除香港结算公司 大于5%减持不用发公告 香港中央结算 HKSCC
50
- stock_gdfx_free_top_10 = stock_gdfx_free_top_10.loc[
61
+ # 持股大于5% 减持需要发公告
62
+ # 排除香港结算公司不发公共 小于5%减持不用发公告
63
+ # 香港中央结算 HKSCC
64
+ stock_free_top_greater_than_5 = stock_gdfx_free_top_10.loc[
51
65
  (stock_gdfx_free_top_10['circulation_ratio'] >= 5) & (stock_gdfx_free_top_10['is_hk'] == 'A')]
52
66
 
53
- circulation_ratio = sum(stock_gdfx_free_top_10['circulation_ratio'])
67
+ stock_free_qfii = stock_gdfx_free_top_10.loc[stock_gdfx_free_top_10['shareholder_nature'] == 'QFII']
68
+
69
+ # qfii 数量
70
+ qfii_number = stock_free_qfii.shape[0]
71
+ # qfii 类型
72
+ qfii_type = set_qfii_type(qfii_number, stock_free_qfii.copy())
73
+
74
+ circulation_ratio = sum(stock_free_top_greater_than_5['circulation_ratio'])
54
75
  mv_circulation_ratio = round((100 - circulation_ratio) / 100, 2)
55
76
  # 防止错误数据
56
77
  if mv_circulation_ratio < 0:
57
78
  mv_circulation_ratio = 1
58
- return mv_circulation_ratio
79
+
80
+ result_dict = {
81
+ 'mv_circulation_ratio': mv_circulation_ratio,
82
+ 'qfii_type': qfii_type,
83
+ 'qfii_number': qfii_number
84
+
85
+ }
86
+ return result_dict
87
+
88
+
89
+ def set_qfii_type(qfii_number, stock_free_qfii):
90
+ if qfii_number > 0:
91
+ stock_free_qfii['new_change'] = stock_free_qfii['change']
92
+ stock_free_qfii.loc[stock_free_qfii['change_ratio'] == 0, 'new_change'] = 0
93
+ stock_free_qfii.loc[stock_free_qfii['change'] == '新进', 'new_change'] = \
94
+ stock_free_qfii['shares_number']
95
+ stock_free_qfii['new_change'] = stock_free_qfii['new_change'].astype(float)
96
+
97
+ stock_free_qfii_new_in = stock_free_qfii.loc[stock_free_qfii['change'] == '新进']
98
+ if data_frame_util.is_not_empty(stock_free_qfii_new_in):
99
+ qfii_type = 1
100
+ return qfii_type
101
+
102
+ stock_free_qfii_add = stock_free_qfii.loc[
103
+ (~stock_free_qfii['change'].isin(['不变', '新进'])) & (stock_free_qfii['new_change'] > 0)]
104
+
105
+ if data_frame_util.is_not_empty(stock_free_qfii_add):
106
+ qfii_type = 2
107
+ return qfii_type
108
+
109
+ stock_free_qfii_not_change = stock_free_qfii.loc[stock_free_qfii['change'] == '不变']
110
+
111
+ if data_frame_util.is_not_empty(stock_free_qfii_not_change):
112
+ qfii_type = 3
113
+ return qfii_type
114
+
115
+ stock_free_qfii_reduce = stock_free_qfii.loc[
116
+ (~stock_free_qfii['change'].isin(['不变', '新进'])) & (stock_free_qfii['new_change'] < 0)]
117
+
118
+ if data_frame_util.is_not_empty(stock_free_qfii_reduce):
119
+ qfii_type = 4
120
+ return qfii_type
121
+ else:
122
+ return 0
59
123
 
60
124
 
61
125
  def get_east_money_stock_info():
@@ -201,7 +265,11 @@ def single_thread_sync_company_info(east_money_stock_info,
201
265
  company_info_type['total_mv_sp'] = company_one.total_mv_sp
202
266
  company_info_type['flow_mv_level'] = company_one.flow_mv_level
203
267
  company_info_type['classification'] = company_one.classification
204
- company_info_type['mv_circulation_ratio'] = calculate_circulation_ratio(company_one.symbol)
268
+
269
+ result_dict = calculate_circulation_ratio(company_one.symbol)
270
+ company_info_type['mv_circulation_ratio'] = result_dict['mv_circulation_ratio']
271
+ company_info_type['qfii_type'] = result_dict['qfii_type']
272
+ company_info_type['qfii_number'] = result_dict['qfii_number']
205
273
  # 获取同花顺最新概念
206
274
  company_info_type = ths_concept_common_service_api.set_ths_concept(company_one.symbol, company_info_type)
207
275
  now_date = datetime.now()
@@ -443,6 +443,8 @@ def filed_sort(company_info):
443
443
  "final_controller_name",
444
444
  "final_controller_rate",
445
445
  "mv_circulation_ratio",
446
+ 'qfii_type',
447
+ 'qfii_number',
446
448
  "flow_mv_sp",
447
449
  "total_mv_sp",
448
450
  "now_price",
@@ -16,6 +16,7 @@ import time
16
16
  import mns_common.utils.data_frame_util as data_frame_util
17
17
  import mns_common.component.cookie.cookie_info_service as cookie_info_service
18
18
  from datetime import datetime
19
+ import mns_common.component.em.em_stock_info_api as em_stock_info_api
19
20
 
20
21
  mongodb_util_27017 = MongodbUtil('27017')
21
22
 
@@ -25,9 +26,7 @@ mongodb_util_27017 = MongodbUtil('27017')
25
26
  # balance 资产负债
26
27
  # 同步所有股票 报表
27
28
  def sync_all_stocks_report():
28
- em_a_stock_info_df = mongodb_util_27017.find_all_data('em_a_stock_info')
29
- em_a_stock_info_df = em_a_stock_info_df[~em_a_stock_info_df['symbol'].astype(str).str.startswith(('8', '4'))]
30
-
29
+ em_a_stock_info_df = em_stock_info_api.get_a_stock_info()
31
30
  em_a_stock_info_df = common_service_fun_api.add_pre_prefix(em_a_stock_info_df)
32
31
  # 或等效写法 df['A'].str[0:6]
33
32
 
@@ -132,7 +131,7 @@ def save_one_symbol_data(stock_one, report_type_list, xue_qiu_cookie, save_tag,
132
131
 
133
132
 
134
133
  def sync_xue_qiu_very_period_report(report_name, symbol):
135
- em_a_stock_info_df = mongodb_util_27017.find_all_data('em_a_stock_info')
134
+ em_a_stock_info_df = em_stock_info_api.get_a_stock_info()
136
135
  if symbol is not None:
137
136
  em_a_stock_info_df = em_a_stock_info_df.loc[em_a_stock_info_df['symbol'] == symbol]
138
137
  em_a_stock_info_df = common_service_fun_api.add_pre_prefix(em_a_stock_info_df)
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.4.0.2
3
+ Version: 1.4.0.4
4
4
 
@@ -3,13 +3,13 @@ mns_scheduler/company_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlI
3
3
  mns_scheduler/company_info/announce/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
4
4
  mns_scheduler/company_info/announce/company_announce_sync_service.py,sha256=q8zYOZJmRin_QU2uPk52wngNdgnZooabnfrnqzqFIrM,3055
5
5
  mns_scheduler/company_info/base/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
6
- mns_scheduler/company_info/base/sync_company_base_info_api.py,sha256=SIBQqUbAZXGCfAoYq78McvIZ6vrttlCfAlqhZl23z9U,21050
6
+ mns_scheduler/company_info/base/sync_company_base_info_api.py,sha256=-UTK-Xspu5clBFsBl7k-ZPd9HT-w8EGL974lZaoSLkc,23856
7
7
  mns_scheduler/company_info/base/sync_company_hold_info_api.py,sha256=ep9CthkoL_NNqkZgAeAdZqaf7_LNFDCrZonUjrT7w5o,1587
8
8
  mns_scheduler/company_info/base/sync_company_product_area_industry.py,sha256=g1g3NvJFteKMKkovoLrfL5MZovFnj_K4uWdB9EVzviY,7529
9
9
  mns_scheduler/company_info/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
10
10
  mns_scheduler/company_info/clean/company_info_clean_api.py,sha256=P_-Nms6S1nVyqVOFKDT-Cq1RvriZV4IMz9eZCDF5Ovk,6104
11
11
  mns_scheduler/company_info/constant/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
12
- mns_scheduler/company_info/constant/company_constant_data.py,sha256=0qhRXLASsQlYnJe_vy5HCwNQZWz-hmJslbr9VuBnmGY,22486
12
+ mns_scheduler/company_info/constant/company_constant_data.py,sha256=xrwnQqKqkJBHBGbEj7Ad9wz52lYXrxelfCQCDWm6ICM,22532
13
13
  mns_scheduler/company_info/de_list_stock/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
14
14
  mns_scheduler/company_info/de_list_stock/de_list_stock_service.py,sha256=QNtKc1ZI6xHjupcxbOBN7fBhi6oAGtL7X1TQZVzfpnk,1993
15
15
  mns_scheduler/company_info/em_stock_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
@@ -58,7 +58,7 @@ mns_scheduler/finance/em/em_financial_profit_sync_service_api.py,sha256=j5xnzcSt
58
58
  mns_scheduler/finance/em/finance_common_api.py,sha256=rqsVJZEklJjvM9ogl-9GQaWxyh1LE6IKoTkQkN5cBvE,2453
59
59
  mns_scheduler/finance/xue_qiu/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
60
60
  mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py,sha256=r_RtfM2SBzQcvO1MH8Dt8mOXg2tbZOLz0sNwqne9jFs,2769
61
- mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py,sha256=SqJhq57BHyz0pJbLLv1fqfmhtapxQFT_OdNNL7v4wgk,7275
61
+ mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py,sha256=VMCuRODu7mf5Qn6RrZ-yIEL7wSLexrtCIsxqyfNCWuk,7199
62
62
  mns_scheduler/hk/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
63
63
  mns_scheduler/hk/hk_company_info_sync_service_api.py,sha256=MGIKodN9oXaY0iwtdsrg4wwHXkMglFvY8eyeTpbas6k,3724
64
64
  mns_scheduler/hk/hk_industry_info_sync_service_api.py,sha256=WdCTaBi4GDicWfmiYbI-byBCXZwknkYZHk6y2IloMys,2275
@@ -165,7 +165,7 @@ mns_scheduler/zz_task/data_sync_task.py,sha256=V17cYsn_NxmbJoPG_AFcqrps1XzQF-wMP
165
165
  mns_scheduler/zz_task/compensation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
166
  mns_scheduler/zz_task/compensation/compensate_task.py,sha256=Dyo66NcSnXZ-Cne4_v77BBb27SemAiuGXRLnvQ26X0E,6464
167
167
  mns_scheduler/zz_task/compensation/compensate_task_one_day.py,sha256=ize69Ocy1k5rf8Xckk1izcEJ361HBtWH1zoJrScBS28,5751
168
- mns_scheduler-1.4.0.2.dist-info/METADATA,sha256=B8qLX6Sn2V_umRcLHuql5aZWAjHMZuvtCepnb5OzzJI,64
169
- mns_scheduler-1.4.0.2.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
170
- mns_scheduler-1.4.0.2.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
171
- mns_scheduler-1.4.0.2.dist-info/RECORD,,
168
+ mns_scheduler-1.4.0.4.dist-info/METADATA,sha256=Qc9pCYrD_5-QeRcHHLBO0_M28FcJw1ix_3jc5qupQws,64
169
+ mns_scheduler-1.4.0.4.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
170
+ mns_scheduler-1.4.0.4.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
171
+ mns_scheduler-1.4.0.4.dist-info/RECORD,,