@ -14,7 +14,7 @@ import re
from pprint import pprint
import pandas as pd
from fund_info . statistic import FundStatistic
from utils . index import get_last_quarter_str
from utils . index import get_last_quarter_str , find_from_list_of_dict
from openpyxl import load_workbook
import os
@ -44,9 +44,10 @@ def get_fund_code_pool():
)
return fund_code_pool
def stocks_compare ( stock_list , fund_code_pool = None ) :
def stocks_compare ( stock_list , * , quarter_index = None , fund_code_pool = None , is_A_stock = None ) :
each_statistic = FundStatistic ( )
last_quarter_index = get_last_quarter_str ( 2 )
if quarter_index == None :
quarter_index = get_last_quarter_str ( 2 )
filter_list = [ ]
for stock in stock_list :
@ -60,7 +61,7 @@ def stocks_compare(stock_list, fund_code_pool=None):
last_quarter_holder_detail_dict = each_statistic . select_special_stock_special_quarter_info (
stock_code ,
last_ quarter_index,
quarter_index,
fund_code_pool
)
@ -85,8 +86,13 @@ def stocks_compare(stock_list, fund_code_pool=None):
if diff_holder_asset == 0 :
flag = ' = '
item_tuple = ( stock_code , stock_name , holder_count , last_holder_count ,
diff_holder_count , diff_holder_count_percent , flag_count , holder_asset , last_holder_asset , diff_holder_asset , diff_holder_asset_percent , flag_asset )
item_tuple = [ stock_code , stock_name , holder_count , last_holder_count ,
diff_holder_count , diff_holder_count_percent , flag_count , holder_asset , last_holder_asset , diff_holder_asset , diff_holder_asset_percent , flag_asset ]
if is_A_stock :
industry_name_third = stock_holder_detail . get ( ' industry_name_third ' )
industry_name_second = stock_holder_detail . get ( ' industry_name_second ' )
industry_name_first = stock_holder_detail . get ( ' industry_name_first ' )
item_tuple = [ * item_tuple , industry_name_third , industry_name_second , industry_name_first ]
# if diff_percent == "+∞" or not float(diff_percent.rstrip('%')) < -20:
filter_list . append ( item_tuple )
@ -114,52 +120,50 @@ def t100_stocks_rank(quarter_index=None, *, each_statistic):
# 所有股票排名
def all_stocks_rank ( each_statistic ) :
quarter_index = get_last_quarter_str ( )
quarter_index = get_last_quarter_str ( 2 )
print ( " quarter_index " , quarter_index )
last_quarter_index = get_last_quarter_str ( 2 )
last_quarter_index = get_last_quarter_str ( 3 )
sheet_name = last_quarter_index + ' 基金重仓股T100 '
columns = [ ' 代码 ' ,
' 名称 ' , quarter_index + ' 持有数量(只) ' , last_quarter_index + ' 持有数量(只) ' , ' 持有数量环比 ' , ' 持有数量环比百分比 ' , ' 持有数量升或降 ' , quarter_index + ' 持有市值(亿元) ' , last_quarter_index + ' 持有市值(亿元) ' , ' 持有市值环比 ' , ' 持有市值环比百分比 ' , ' 持有市值升或降 ' ]
output_file = ' ./outcome/数据整理/strategy/ ' + quarter_index + ' -all_stock_rank .xlsx'
output_file = ' ./outcome/数据整理/strategy/ all_stock_rank/ ' + quarter_index + ' .xlsx'
stock_top_list = each_statistic . all_stock_fund_count (
quarter_index = quarter_index ,
filter_count = 0 )
#print("stock_top_list", stock_top_list)
all_a_stocks_industry_info_list = each_statistic . query_all_stock_industry_info ( )
a_stock_list = [ ]
hk_stock_list = [ ]
other_stock_list = [ ]
for stock_name_code in stock_top_list :
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股/深证主板'、'A股/创业板'、'A股/上证主板'、'A股/科创板'
a_condition = bool ( re . search ( " ^(00(0|1|2|3) \ d {3} )|(30(0|1) \ d {3} )|(60(0|1|2|3|5) \ d {3} )|68(8|9) \ d {3} $ " , stock_code ) )
target_item = find_from_list_of_dict ( all_a_stocks_industry_info_list , ' stock_code ' , stock_code )
if a_condition and target_item :
print ( ' stock_code ' , stock_code )
stock_name_code [ 1 ] [ ' industry_name_first ' ] = target_item . get ( ' industry_name_first ' )
stock_name_code [ 1 ] [ ' industry_name_second ' ] = target_item . get ( ' industry_name_second ' )
stock_name_code [ 1 ] [ ' industry_name_third ' ] = target_item . get ( ' industry_name_third ' )
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 )
#print("df_a_list", df_a_list)
a_stock_compare_list = stocks_compare ( a_stock_list , quarter_index = last_quarter_index , is_A_stock = True )
hk_stock_compare_list = stocks_compare ( hk_stock_list , quarter_index = last_quarter_index , )
other_stock_compare_list = stocks_compare ( other_stock_list , quarter_index = last_quarter_index , )
a_columns = [ * columns , ' 三级行业 ' , ' 二级行业 ' , ' 一级行业 ' ]
df_a_list = pd . DataFrame ( a_stock_compare_list , columns = a_columns )
df_hk_list = pd . DataFrame ( hk_stock_compare_list , columns = columns )
df_other_list = pd . DataFrame ( other_stock_compare_list , columns = columns )
@ -223,7 +227,44 @@ def all_stock_holder_detail(quarter_index, each_statistic, threshold=0):
else :
df_list . to_excel (
path , sheet_name = quarter_index )
# 获取某些基金的十大持仓股票信息
def get_special_fund_code_holder_stock_detail ( quarter_index , each_statistic ) :
#基金组合信息
fund_portfolio = {
' 001811 ' : {
' name ' : ' 中欧明睿新常态混合A ' ,
' position ' : 0.2
} ,
' 001705 ' : {
' name ' : ' 泓德战略转型股票 ' ,
' position ' : 0.2
} ,
' 163415 ' : {
' name ' : ' 兴全商业模式优选混合 ' ,
' position ' : 0.2
} ,
' 001043 ' : {
' name ' : ' 工银美丽城镇主题股票A ' ,
' position ' : 0.2
} ,
' 000547 ' : {
' name ' : ' 建信健康民生混合 ' ,
' position ' : 0.2
} ,
' 450001 ' : {
' name ' : ' 国富中国收益混合 ' ,
' position ' : 0.2
} ,
}
fund_code_pool = list ( fund_portfolio . keys ( ) )
holder_stock_industry_list = each_statistic . summary_special_funds_stock_detail ( fund_code_pool , quarter_index )
path = ' ./outcome/数据整理/funds/ ' + ' / ' + ' 高分权益基金组合十大持仓明细 ' + ' .xlsx '
columns = [ ' 基金代码 ' , ' 基金名称 ' , ' 基金类型 ' , ' 基金经理 ' , ' 基金总资产(亿元) ' , ' 基金股票总仓位 ' , ' 十大股票仓位 ' , ' 股票代码 ' , ' 股票名称 ' , ' 所占仓位 ' , ' 所处仓位排名 ' , ' 三级行业 ' , ' 二级行业 ' , ' 一级行业 ' ]
df_a_list = pd . DataFrame ( holder_stock_industry_list , columns = columns )
writer = pd . ExcelWriter ( path , engine = ' xlsxwriter ' )
df_a_list . to_excel ( writer , sheet_name = ' 十大持仓明细-- ' + quarter_index )
writer . save ( )
if __name__ == ' __main__ ' :
each_statistic = FundStatistic ( )
quarter_index = " 2021-Q1 "
@ -231,8 +272,11 @@ if __name__ == '__main__':
# 所有股票的基金持仓细节
#all_stock_holder_detail(quarter_index, each_statistic)
# 获取所有股票排名, 分类输出
# 获取所有股票排名, 按股票市场 分类输出
all_stocks_rank ( each_statistic )
# 获取Top100股票排名
#t100_stocks_rank(each_statistic=each_statistic)
# 获取某些基金的十大持仓股票信息
#get_special_fund_code_holder_stock_detail(quarter_index, each_statistic)