mns-common 1.4.3.1__py3-none-any.whl → 1.4.3.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-common might be problematic. Click here for more details.

@@ -60,16 +60,21 @@ def calculate_parameter_factor(real_time_quotes_now):
60
60
  real_time_quotes_now['large_inflow_multiple'] = round(
61
61
  (real_time_quotes_now['large_order_net_inflow'] / real_time_quotes_now['reference_main_inflow']), 2)
62
62
 
63
- real_time_quotes_now.loc[:, 'real_disk_diff_amount_exchange'] = round(
64
- (real_time_quotes_now['disk_diff_amount_exchange'] / real_time_quotes_now['mv_circulation_ratio']), 2)
63
+ if 'real_disk_diff_amount_exchange' not in real_time_quotes_now.columns:
64
+ real_time_quotes_now.loc[:, 'real_disk_diff_amount_exchange'] = round(
65
+ (real_time_quotes_now['disk_diff_amount_exchange'] / real_time_quotes_now['mv_circulation_ratio']), 2)
65
66
 
66
- real_time_quotes_now.loc[:, 'real_main_inflow_multiple'] = round(
67
- (real_time_quotes_now['main_inflow_multiple'] / real_time_quotes_now['mv_circulation_ratio']), 2)
67
+ if 'real_main_inflow_multiple' not in real_time_quotes_now.columns:
68
+ real_time_quotes_now.loc[:, 'real_main_inflow_multiple'] = round(
69
+ (real_time_quotes_now['main_inflow_multiple'] / real_time_quotes_now['mv_circulation_ratio']), 2)
68
70
 
69
- real_time_quotes_now.loc[:, 'real_super_main_inflow_multiple'] = round(
70
- (real_time_quotes_now['super_main_inflow_multiple'] / real_time_quotes_now['mv_circulation_ratio']), 2)
71
- real_time_quotes_now.loc[:, 'real_exchange'] = round(
72
- (real_time_quotes_now['exchange'] / real_time_quotes_now['mv_circulation_ratio']), 2)
71
+ if 'real_super_main_inflow_multiple' not in real_time_quotes_now.columns:
72
+ real_time_quotes_now.loc[:, 'real_super_main_inflow_multiple'] = round(
73
+ (real_time_quotes_now['super_main_inflow_multiple'] / real_time_quotes_now['mv_circulation_ratio']), 2)
74
+
75
+ if 'real_exchange' not in real_time_quotes_now.columns:
76
+ real_time_quotes_now.loc[:, 'real_exchange'] = round(
77
+ (real_time_quotes_now['exchange'] / real_time_quotes_now['mv_circulation_ratio']), 2)
73
78
 
74
79
  real_time_quotes_now.loc[:, 'max_real_main_inflow_multiple'] = real_time_quotes_now[
75
80
  ['real_main_inflow_multiple', 'real_super_main_inflow_multiple']].max(axis=1)
@@ -0,0 +1,7 @@
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)
@@ -0,0 +1,125 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 21
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ from loguru import logger
9
+ import csv
10
+ import requests
11
+ import pandas as pd
12
+ import mns_common.component.em.em_stock_info_api as em_stock_info_api
13
+ from functools import lru_cache
14
+ import mns_common.utils.data_frame_util as data_frame_util
15
+
16
+
17
+ @lru_cache()
18
+ def get_us_stock_info():
19
+ # 东财美股列表
20
+ em_us_stock_info_df = em_stock_info_api.get_us_stock_info()
21
+ em_us_stock_info_df['symbol'] = em_us_stock_info_df['symbol'].str.replace('_', '-')
22
+ em_us_stock_info_df = em_us_stock_info_df.loc[em_us_stock_info_df['total_mv'] != 0]
23
+
24
+ if data_frame_util.is_not_empty(em_us_stock_info_df):
25
+ em_us_stock_info_df.fillna({'list_date': 10000101}, inplace=True)
26
+ em_us_stock_info_df = em_us_stock_info_df[['symbol', 'name', 'list_date']]
27
+
28
+ # alpha 股票名单
29
+ alpha_us_stock_info = get_us_alpha_stock_list()
30
+ alpha_us_stock_info = alpha_us_stock_info.loc[alpha_us_stock_info['assetType'] == 'Stock']
31
+ if data_frame_util.is_not_empty(alpha_us_stock_info):
32
+ alpha_us_stock_info.fillna({'list_date': '1000-01-01'}, inplace=True)
33
+ alpha_us_stock_info = alpha_us_stock_info[['symbol', 'name', 'list_date']]
34
+
35
+ alpha_us_stock_info['list_date'] = alpha_us_stock_info['list_date'].astype(str).str.replace('-', '').astype(int)
36
+
37
+ us_stock_result_df = pd.concat([alpha_us_stock_info, em_us_stock_info_df])
38
+ us_stock_result_df.drop_duplicates(subset=['symbol'], inplace=True)
39
+
40
+ return us_stock_result_df
41
+
42
+
43
+ @lru_cache()
44
+ def get_us_etf_info():
45
+ us_etf_info_df = em_stock_info_api.get_us_etf_info()
46
+ if data_frame_util.is_not_empty(us_etf_info_df):
47
+ us_etf_info_df.fillna({'list_date': 10000101}, inplace=True)
48
+ us_etf_info_df = us_etf_info_df[['symbol', 'name', 'list_date']]
49
+
50
+ # alpha ETF名单
51
+ alpha_us_etf_info = get_us_alpha_stock_list()
52
+ alpha_us_etf_info = alpha_us_etf_info.loc[alpha_us_etf_info['assetType'] == 'ETF']
53
+ if data_frame_util.is_not_empty(alpha_us_etf_info):
54
+ alpha_us_etf_info.fillna({'list_date': '1000-01-01'}, inplace=True)
55
+ alpha_us_etf_info = alpha_us_etf_info[['symbol', 'name', 'list_date']]
56
+
57
+ alpha_us_etf_info['list_date'] = alpha_us_etf_info['list_date'].astype(str).str.replace('-', '').astype(int)
58
+ us_etf_result_df = pd.concat([us_etf_info_df, alpha_us_etf_info])
59
+ us_etf_result_df.drop_duplicates(subset=['symbol'], inplace=True)
60
+
61
+ return us_etf_result_df
62
+
63
+
64
+ # 退市 https://www.alphavantage.co/query?function=LISTING_STATUS&date=2012-07-10&state=delisted&apikey=QODR3TBYB2U4M9YR
65
+ @lru_cache()
66
+ def get_us_alpha_stock_list():
67
+ try:
68
+ # replace the "demo" apikey below with your own key from https://www.alphavantage.co/support/#api-key
69
+ CSV_URL = 'https://www.alphavantage.co/query?function=LISTING_STATUS&apikey=demo'
70
+ with requests.Session() as s:
71
+ download = s.get(CSV_URL)
72
+ decoded_content = download.content.decode('utf-8')
73
+ cr = csv.reader(decoded_content.splitlines(), delimiter=',')
74
+ my_list = list(cr)
75
+ # 提取列名(第1行)
76
+ columns = my_list[0]
77
+ # 提取数据(第2行及以后)
78
+ values = my_list[1:]
79
+
80
+ # 转换为 DataFrame
81
+ df = pd.DataFrame(values, columns=columns)
82
+ df = df.rename(columns={'ipoDate': 'list_date'})
83
+ if data_frame_util.is_not_empty(df):
84
+ df.to_csv(r'D:\mns\mns-common\mns_common\component\us\listing_status.csv', index=False, encoding='gbk')
85
+ return df
86
+ except BaseException as e:
87
+ logger.error("下载出现异常:{},", e)
88
+ df = pd.read_csv(r'D:\mns\mns-common\mns_common\component\us\listing_status.csv', encoding='utf-8')
89
+ df = df.rename(columns={'ipoDate': 'list_date'})
90
+ return df
91
+
92
+
93
+ def get_us_alpha_stock_de_list():
94
+ try:
95
+ # replace the "demo" apikey below with your own key from https://www.alphavantage.co/support/#api-key
96
+ CSV_URL = 'https://www.alphavantage.co/query?function=LISTING_STATUS&date=2025-08-02&state=delisted&apikey=QODR3TBYB2U4M9YR'
97
+ with requests.Session() as s:
98
+ download = s.get(CSV_URL)
99
+ decoded_content = download.content.decode('utf-8')
100
+ cr = csv.reader(decoded_content.splitlines(), delimiter=',')
101
+ my_list = list(cr)
102
+ # 提取列名(第1行)
103
+ columns = my_list[0]
104
+ # 提取数据(第2行及以后)
105
+ values = my_list[1:]
106
+
107
+ # 转换为 DataFrame
108
+ df = pd.DataFrame(values, columns=columns)
109
+ df = df.rename(columns={'ipoDate': 'list_date'})
110
+ if data_frame_util.is_not_empty(df):
111
+ df.to_csv(r'D:\mns\mns-common\mns_common\component\us\de_list_status.csv', index=False, encoding='gbk')
112
+ return df
113
+ except BaseException as e:
114
+ logger.error("下载出现异常:{},", e)
115
+ df = pd.read_csv(r'D:\mns\mns-common\mns_common\component\us\de_list_status.csv', encoding='utf-8')
116
+ df = df.rename(columns={'ipoDate': 'list_date'})
117
+ return df
118
+
119
+
120
+ if __name__ == '__main__':
121
+ # get_us_alpha_stock_de_list()
122
+ df_test = get_us_stock_info()
123
+ df_test.drop_duplicates(subset=['symbol'], inplace=True)
124
+ print(df_test)
125
+ get_us_alpha_stock_de_list()
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-common
3
- Version: 1.4.3.1
3
+ Version: 1.4.3.4
4
4
 
@@ -89,7 +89,7 @@ mns_common/component/cookie/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94
89
89
  mns_common/component/cookie/cookie_enum.py,sha256=O4-cEhJI7EibdtVo83kfBKKAXj31WmdWHSzQV0F3FDM,373
90
90
  mns_common/component/cookie/cookie_info_service.py,sha256=j2xfo5Pzfzp3_ILkY2K9b2W_rys7lB1IhGm8jHKRxF0,924
91
91
  mns_common/component/data/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
92
- mns_common/component/data/data_init_api.py,sha256=MydFBrwP61pka9jK7rrMz3HF00meRUOi4m4_5FfyfUw,5030
92
+ mns_common/component/data/data_init_api.py,sha256=VFPmjk_Js16q42l3h1o__6DU1Dpnbf0BJlCBksU12q8,5355
93
93
  mns_common/component/deal/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
94
94
  mns_common/component/deal/deal_service_api.py,sha256=XV_L8qfeTPbojmNXFjnUe-5ZTp3ADT3ett0j-gPuPVI,3806
95
95
  mns_common/component/deal/terminal_enum.py,sha256=JUkSTXLQW1fob05PCCzIBg_VKlGmqaJEa0GOvrQH6e0,275
@@ -130,6 +130,8 @@ mns_common/component/tfp/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNd
130
130
  mns_common/component/tfp/stock_tfp_api.py,sha256=_iScNNUmzEXeZ32PFQ_bFs3CErQk_188ESS3hUgCH7E,4455
131
131
  mns_common/component/trade_date/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
132
132
  mns_common/component/trade_date/trade_date_common_service_api.py,sha256=PHrcUjgLdNKbqyMGot0poKtiLBys_wRZoheMhPJE-U4,3032
133
+ mns_common/component/us/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
134
+ mns_common/component/us/us_stock_etf_info_api.py,sha256=lwlMsjp2pwJVBHcNz0jwdfED-FTQgawSg06VIoDXt6s,5565
133
135
  mns_common/component/zt/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
134
136
  mns_common/component/zt/zt_common_service_api.py,sha256=6pHRLLJjKcLLBA-xXkAU8SE6DZ5dgVFBRVjJmhkL0II,11945
135
137
  mns_common/constant/__init__.py,sha256=xu36nA6MJTauswUWPfKIKH0E-lpOAHTw2TL5QI_6TeY,165
@@ -154,7 +156,7 @@ mns_common/utils/date_handle_util.py,sha256=XS-MyA8_7k35LOCFAYOHgVcVkMft_Kc4Wa9U
154
156
  mns_common/utils/db_util.py,sha256=hSmfNAN4vEeEaUva6_cicZEhb2jSnib-Gvk2reke1vc,2590
155
157
  mns_common/utils/file_util.py,sha256=egWu6PenGPRp_ixrNTHKarT4dAnOT6FETR82EHUZJnQ,1042
156
158
  mns_common/utils/ip_util.py,sha256=UTcYfz_uytB__6nlBf7T-izuI7hi4XdB6ET0sJgEel4,969
157
- mns_common-1.4.3.1.dist-info/METADATA,sha256=JaQ3B4YCkP34xJfH_YWPydF1tkQsIXuqASCH9VVqNEg,61
158
- mns_common-1.4.3.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
159
- mns_common-1.4.3.1.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
160
- mns_common-1.4.3.1.dist-info/RECORD,,
159
+ mns_common-1.4.3.4.dist-info/METADATA,sha256=i_Alytg-h5H9KczgIUopEJWUe2mHVSkkgj0MxsgRuv4,61
160
+ mns_common-1.4.3.4.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
161
+ mns_common-1.4.3.4.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
162
+ mns_common-1.4.3.4.dist-info/RECORD,,