|
|
|
@ -11,11 +11,12 @@ Copyright (c) 2020 Camel Lu
|
|
|
|
|
'''
|
|
|
|
|
import re
|
|
|
|
|
import decimal
|
|
|
|
|
from functools import cmp_to_key
|
|
|
|
|
from pprint import pprint
|
|
|
|
|
import pandas as pd
|
|
|
|
|
import numpy as np
|
|
|
|
|
from fund_info.statistic import FundStatistic
|
|
|
|
|
from utils.index import get_last_quarter_str, get_stock_market, find_from_list_of_dict, update_xlsx_file
|
|
|
|
|
from utils.index import get_last_quarter_str, get_stock_market, find_from_list_of_dict, update_xlsx_file, update_xlsx_file_with_sorted
|
|
|
|
|
from utils.file_op import read_dir_all_file
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -399,11 +400,25 @@ def get_special_fund_code_holder_stock_detail(each_statistic=None, quarter_index
|
|
|
|
|
|
|
|
|
|
update_xlsx_file(path, df_a_list, sheet_name='十大持仓明细--' + quarter_index)
|
|
|
|
|
|
|
|
|
|
def compare(item1, item2):
|
|
|
|
|
year1 = int(item1[0:4])
|
|
|
|
|
quarter_index1 = int(item1[6:7])
|
|
|
|
|
year2 = int(item2[0:4])
|
|
|
|
|
quarter_index2 = int(item2[6:7])
|
|
|
|
|
if year2 < year1 or (year2 == year1 and quarter_index2 < quarter_index1):
|
|
|
|
|
return -1
|
|
|
|
|
elif year2 > year1 or (year2 == year1 and quarter_index2 > quarter_index1):
|
|
|
|
|
return 1
|
|
|
|
|
else:
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
# Calling
|
|
|
|
|
# list.sort(key=compare)
|
|
|
|
|
def calculate_quarter_fund_count():
|
|
|
|
|
stock_markets = ['A股/上证主板', 'A股/创业板', 'A股/科创板', 'A股/深证主板', 'A股/北交所', '港股', '其他']
|
|
|
|
|
for market in stock_markets:
|
|
|
|
|
dir_path = './outcome/数据整理/stocks/' + market + '/'
|
|
|
|
|
# dir_path = './outcome/数据整理/stocks/' + 'A股/北交所' + '/'
|
|
|
|
|
files = read_dir_all_file(dir_path)
|
|
|
|
|
print(market, "files", len(files))
|
|
|
|
|
for file_path in files:
|
|
|
|
@ -411,9 +426,15 @@ def calculate_quarter_fund_count():
|
|
|
|
|
xls = pd.ExcelFile(path, engine='openpyxl')
|
|
|
|
|
quarter_list = []
|
|
|
|
|
sum_column_name = '总计'
|
|
|
|
|
for sheet_name in reversed(xls.sheet_names):
|
|
|
|
|
if sheet_name == '总计':
|
|
|
|
|
sheet_names = []
|
|
|
|
|
for sheet_name in xls.sheet_names:
|
|
|
|
|
if sheet_name == sum_column_name:
|
|
|
|
|
continue
|
|
|
|
|
sheet_names.append(sheet_name)
|
|
|
|
|
sheet_names.sort(key=cmp_to_key(compare))
|
|
|
|
|
for sheet_name in sheet_names:
|
|
|
|
|
# if sheet_name == '总计':
|
|
|
|
|
# continue
|
|
|
|
|
item_quarter_data = [sheet_name]
|
|
|
|
|
df_cur_sheet = xls.parse(sheet_name)
|
|
|
|
|
item_quarter_data.append(len(df_cur_sheet))
|
|
|
|
@ -422,7 +443,7 @@ def calculate_quarter_fund_count():
|
|
|
|
|
quarter_list.append(item_quarter_data)
|
|
|
|
|
columns = ["日期", "持有数量(只)", '持有市值(亿元)']
|
|
|
|
|
df_quarter_list = pd.DataFrame(quarter_list, columns=columns)
|
|
|
|
|
update_xlsx_file(path, df_quarter_list, sum_column_name)
|
|
|
|
|
update_xlsx_file_with_sorted(path, df_quarter_list, sum_column_name, sheet_names)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
@ -436,7 +457,7 @@ if __name__ == '__main__':
|
|
|
|
|
# t100_stocks_rank(each_statistic=each_statistic)
|
|
|
|
|
|
|
|
|
|
# 获取某些基金的十大持仓股票信息
|
|
|
|
|
get_special_fund_code_holder_stock_detail()
|
|
|
|
|
# get_special_fund_code_holder_stock_detail()
|
|
|
|
|
|
|
|
|
|
# calculate_quarter_fund_count()
|
|
|
|
|
select_condition_stocks_rank()
|
|
|
|
|
calculate_quarter_fund_count()
|
|
|
|
|
# select_condition_stocks_rank()
|
|
|
|
|