mns-scheduler 1.4.0.1__py3-none-any.whl → 1.4.0.3__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 +75 -7
- mns_scheduler/company_info/constant/company_constant_data.py +2 -0
- {mns_scheduler-1.4.0.1.dist-info → mns_scheduler-1.4.0.3.dist-info}/METADATA +1 -1
- {mns_scheduler-1.4.0.1.dist-info → mns_scheduler-1.4.0.3.dist-info}/RECORD +6 -6
- {mns_scheduler-1.4.0.1.dist-info → mns_scheduler-1.4.0.3.dist-info}/WHEEL +0 -0
- {mns_scheduler-1.4.0.1.dist-info → mns_scheduler-1.4.0.3.dist-info}/top_level.txt +0 -0
|
@@ -37,25 +37,89 @@ result = []
|
|
|
37
37
|
# 计算实际流通比例
|
|
38
38
|
def calculate_circulation_ratio(symbol):
|
|
39
39
|
query = {"symbol": symbol}
|
|
40
|
-
|
|
41
|
-
if
|
|
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%
|
|
50
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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()
|
|
@@ -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
|
|
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=
|
|
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
|
|
@@ -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.
|
|
169
|
-
mns_scheduler-1.4.0.
|
|
170
|
-
mns_scheduler-1.4.0.
|
|
171
|
-
mns_scheduler-1.4.0.
|
|
168
|
+
mns_scheduler-1.4.0.3.dist-info/METADATA,sha256=HyQ0FUwK6AL0w6H4K8t1vGxR2Rb-YSfMtxIk8tnWwqk,64
|
|
169
|
+
mns_scheduler-1.4.0.3.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
170
|
+
mns_scheduler-1.4.0.3.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
|
|
171
|
+
mns_scheduler-1.4.0.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|