refactor: update fund_statistic

main
jackluson 3 years ago
parent f0986151c0
commit d8ffc6db1b

@ -50,6 +50,7 @@ class FundStatistic:
code_dict = dict()
for result in results:
# print(result)
totol_asset = result[2]
for index in range(4, len(result), 3):
code = result[index]
name = result[index + 1] # 仅以股票名称为key兼容港股A股
@ -61,16 +62,21 @@ class FundStatistic:
if key == None and code and name:
key = str(code) + '-' + str(name)
if(key in code_dict and code != None):
code_dict[key] = code_dict[key] + 1
count = code_dict[key]['count'] + 1
code_dict[key] = {
'count': count
}
else:
code_dict[key] = 1
code_dict[key] = {
'count': 1
}
filer_dict = dict()
for key, value in code_dict.items(): # for (key,value) in girl_dict.items() 这样加上括号也可以
if value > filter_count and key != None:
if value['count'] > filter_count and key != None:
filer_dict[key] = value
# print(key + ":" + str(value))
return sorted(filer_dict.items(), key=lambda x: x[1], reverse=True)
return sorted(filer_dict.items(), key=lambda x: x[1]['count'], reverse=True)
def all_stock_fund_count_and_details(self, *, quarter_index=None, fund_code_pool=None, filter_count=100):
"""查询某一个季度基金的十大持仓并对持仓股票进行汇总统计并根据filter_count进行过滤
@ -101,8 +107,8 @@ class FundStatistic:
totol_asset = result[2]
for index in range(4, len(result), 3):
code = result[index]
name = result[index + 1] # 仅以股票名称为key兼容港股A股
portion = result[index + 2] # 仅以股票名称为key兼容港股A股
name = result[index + 1]
portion = result[index + 2]
if code == None or name == None:
continue
key = fisrt_match_condition_from_list(list(code_dict), code)

@ -1,4 +1,5 @@
# -*- coding:UTF-8 -*-
'''
Desc: 从基金的持仓中统计股票出现频率
File: /index.py
@ -53,16 +54,18 @@ def stocks_compare(stock_list, fund_code_pool=None):
if not stock_code:
continue
stock_name = stock[0].split('-', 1)[1]
stock_sum = stock[1]
stock_holder_detail = stock[1]
stock_sum = stock_holder_detail.get('count')
stock_quarter_count_tuple = each_statistic.item_stock_fund_count(
stock_code,
fund_code_pool
)
last_stock_sum = 0
print("stock_quarter_count_tuple", stock_quarter_count_tuple)
#print("stock_quarter_count_tuple", stock_quarter_count_tuple)
for item in stock_quarter_count_tuple:
quarter_index_str = item[1]
if quarter_index_str == last_quarter_index:
last_stock_sum = item[0]
break
@ -86,79 +89,91 @@ def stocks_compare(stock_list, fund_code_pool=None):
# print(item_tuple)
return filter_list
# 股票排名
def rank_stock(each_statistic, threshold=80):
quarter_index = get_last_quarter_str()
# T100权重股排名
def t100_stocks_rank(quarter_index, each_statistic):
if quarter_index == None:
quarter_index = get_last_quarter_str()
last_quarter_index = get_last_quarter_str(2)
output_file = './outcome/数据整理/strategy/top100_rank.xlsx'
sheet_name = quarter_index + '基金重仓股T100'
columns=['代码',
'名称', quarter_index + '持有数量(只)', last_quarter_index + '持有数量(只)', '环比', '环比百分比', '升Or降']
if threshold == 0:
output_file = './outcome/数据整理/strategy/'+ quarter_index +'-all_stock_rank.xlsx'
stock_top_list = each_statistic.all_stock_fund_count(
quarter_index=quarter_index,
filter_count=threshold)
if threshold != 0:
stock_top_list = stock_top_list[:100]
filter_count=80)
stock_top_list = stock_top_list[:100] # 获取top100权重股
#pprint(stock_top_list)
if threshold != 0:
filter_list = stocks_compare(stock_top_list)
df_filter_list = pd.DataFrame(filter_list, columns=columns)
df_filter_list.to_excel(output_file, sheet_name=sheet_name)
else:
other_stock_list = []
hk_stock_list = []
a_stock_list = []
for stock_name_code in stock_top_list:
#print(stock_name_code[0])
stock_code = stock_name_code[0].split('-', 1)[0]
#path = 'other'
if bool(re.search("^\d{5}$", stock_code)):
#path = '港股'
hk_stock_list.append(stock_name_code)
elif bool(re.search("^\d{6}$", stock_code)):
if bool(re.search("^00(0|1|2|3)\d{3}$", stock_code)):
#path = 'A股/深证主板'
a_stock_list.append(stock_name_code)
elif bool(re.search("^300\d{3}$", stock_code)):
#path = 'A股/创业板'
a_stock_list.append(stock_name_code)
elif bool(re.search("^60(0|1|2|3|5)\d{3}$", stock_code)):
#path = 'A股/上证主板'
a_stock_list.append(stock_name_code)
elif bool(re.search("^68(8|9)\d{3}$", stock_code)):
#path = 'A股/科创板'
a_stock_list.append(stock_name_code)
else:
other_stock_list.append(stock_name_code)
filter_list = stocks_compare(stock_top_list)
df_filter_list = pd.DataFrame(filter_list, columns=columns)
df_filter_list.to_excel(output_file, sheet_name=sheet_name)
# 所有股票排名
def all_stocks_rank(each_statistic):
quarter_index = get_last_quarter_str()
print("quarter_index", quarter_index)
last_quarter_index = get_last_quarter_str(2)
sheet_name = last_quarter_index + '基金重仓股T100'
columns=['代码',
'名称', quarter_index + '持有数量(只)', last_quarter_index + '持有数量(只)', '环比', '环比百分比', '升Or降']
output_file = './outcome/数据整理/strategy/'+ quarter_index +'-all_stock_rank.xlsx'
stock_top_list = each_statistic.all_stock_fund_count(
quarter_index=quarter_index,
filter_count=0)
other_stock_list = []
#print("stock_top_list", stock_top_list)
hk_stock_list = []
a_stock_list = []
for stock_name_code in stock_top_list:
print(stock_name_code)
stock_code = stock_name_code[0].split('-', 1)[0]
#path = 'other'
if bool(re.search("^\d{5}$", stock_code)):
#path = '港股'
hk_stock_list.append(stock_name_code)
elif bool(re.search("^\d{6}$", stock_code)):
if bool(re.search("^00(0|1|2|3)\d{3}$", stock_code)):
#path = 'A股/深证主板'
a_stock_list.append(stock_name_code)
elif bool(re.search("^300\d{3}$", stock_code)):
#path = 'A股/创业板'
a_stock_list.append(stock_name_code)
elif bool(re.search("^60(0|1|2|3|5)\d{3}$", stock_code)):
#path = 'A股/上证主板'
a_stock_list.append(stock_name_code)
elif bool(re.search("^68(8|9)\d{3}$", stock_code)):
#path = 'A股/科创板'
a_stock_list.append(stock_name_code)
else:
other_stock_list.append(stock_name_code)
else:
other_stock_list.append(stock_name_code)
a_stock_compare_list = stocks_compare(a_stock_list)
hk_stock_compare_list = stocks_compare(hk_stock_list)
other_stock_compare_list = stocks_compare(other_stock_list)
df_a_list = pd.DataFrame(a_stock_compare_list, columns=columns)
df_hk_list = pd.DataFrame(hk_stock_compare_list, columns=columns)
df_other_list = pd.DataFrame(other_stock_compare_list, columns=columns)
a_stock_compare_list = stocks_compare(a_stock_list)
hk_stock_compare_list = stocks_compare(hk_stock_list)
other_stock_compare_list = stocks_compare(other_stock_list)
writer = pd.ExcelWriter(output_file, engine='xlsxwriter')
df_a_list.to_excel(writer, sheet_name='A股')
df_a_list = pd.DataFrame(a_stock_compare_list, columns=columns)
#print("df_a_list", df_a_list)
df_hk_list = pd.DataFrame(hk_stock_compare_list, columns=columns)
df_other_list = pd.DataFrame(other_stock_compare_list, columns=columns)
df_hk_list.to_excel(writer, sheet_name='港股')
writer = pd.ExcelWriter(output_file, engine='xlsxwriter')
df_a_list.to_excel(writer, sheet_name='A股')
df_other_list.to_excel(writer, sheet_name='其他')
df_hk_list.to_excel(writer, sheet_name='港股')
writer.save()
df_other_list.to_excel(writer, sheet_name='其他')
writer.save()
def all_stock(quarter_index, each_statistic, threshold=0):
def all_stock_holder_detail(quarter_index, each_statistic, threshold=0):
stock_list = each_statistic.all_stock_fund_count_and_details(
quarter_index=quarter_index,
filter_count=threshold)
for i in range(0, 500):
for i in range(0, len(stock_list)):
stock = stock_list[i]
stock_name_code = stock[0]
stock_code = stock_name_code.split('-', 1)[0]
@ -176,10 +191,11 @@ def all_stock(quarter_index, each_statistic, threshold=0):
path = 'A股/科创板'
else:
print('stock_name_code', stock_name_code)
#path = 'A股'
hold_fund_count = stock[1]['count']
hold_fund_list = stock[1]['fund_list']
hold_fund_list = sorted(stock[1]['fund_list'], key=lambda x: x['持有市值(亿元)'], reverse=True)
df_list = pd.DataFrame(hold_fund_list)
#if stock_code == 'NTES':
# print('stock_code', df_list)
stock_name_code = stock_name_code.replace('-*', '-').replace('/', '-')
path = './outcome/数据整理/stocks/' + path + '/' + stock_name_code + '.xlsx'
path = path.replace('\/', '-')
@ -209,7 +225,7 @@ if __name__ == '__main__':
each_statistic = FundStatistic()
quarter_index = "2021-Q1"
# 获取重仓股
#rank_stock(each_statistic, 0)
all_stocks_rank(each_statistic)
# 所有股票的基金持仓细节
all_stock(quarter_index, each_statistic)
#all_stock_holder_detail(quarter_index, each_statistic)

Loading…
Cancel
Save