feat: add item_stock_fund_count

main
jackluson 3 years ago
parent dfa6aeaedc
commit 3066a19077

@ -27,19 +27,20 @@ class FundStatistic:
index = get_season_index(date)
quarter_index = year + '-Q' + str(index)
self.quarter_index = quarter_index
self.each_query = FundQuery()
def statistic_stock_fund_count(self, *, query_index=None, filter_count=100):
each_query = FundQuery()
query_index = query_index if query_index else self.quarter_index
results = each_query.select_top_10_stock(query_index)
def all_stock_fund_count(self, *, quarter_index=None, filter_count=100):
quarter_index = quarter_index if quarter_index else self.quarter_index
results = self.each_query.select_top_10_stock(quarter_index)
# pprint(results)
code_dict = dict()
for result in results:
# print(result)
for index in range(1, len(result), 2):
code = result[index]
name = result[index + 1]
key = str(code) + '-' + str(name)
name = result[index + 1] # 仅以股票名称为key兼容港股A股
# key = str(code) + '-' + str(name)
key = str(name)
if(key in code_dict and code != None):
code_dict[key] = code_dict[key] + 1
else:
@ -52,3 +53,7 @@ class FundStatistic:
# print(key + ":" + str(value))
list = sorted(filer_dict.items(), key=lambda x: x[1], reverse=True)
return list
# 分组查询特定股票的每个季度基金持有总数
def item_stock_fund_count(self, stock_name):
return self.each_query.select_special_stock_fund_count(stock_name)

@ -19,7 +19,13 @@ from fund_info.statistic import FundStatistic
if __name__ == '__main__':
each_statistic = FundStatistic()
stock_top_list = each_statistic.statistic_stock_fund_count(
filter_count=88)
stock_top_list = each_statistic.all_stock_fund_count(
quarter_index="2021-Q1",
filter_count=89)
print('2020-Q4 top 50 股票')
pprint(stock_top_list)
print(len(stock_top_list))
stock_quarter_count = each_statistic.item_stock_fund_count('海螺水泥')
print("stock_quarter_count", stock_quarter_count)

@ -91,7 +91,7 @@ class FundQuery:
self.cursor.execute(sql_update, [total_asset, fund_code])
self.connect_instance.commit()
def select_top_10_stock(self, query_index=None):
def select_top_10_stock(self, quarter_index=None):
stock_sql_join = ''
for index in range(10):
stock_sql_join = stock_sql_join + \
@ -99,10 +99,26 @@ class FundQuery:
str(index), str(index)) + ","
# print(stock_sql_join[0:-1])
stock_sql_join = stock_sql_join[0:-1]
sql_query_season = "SELECT t.fund_code," + stock_sql_join + \
sql_query_quarter = "SELECT t.fund_code," + stock_sql_join + \
" FROM fund_morning_stock_info as t WHERE t.quarter_index = %s AND t.stock_position_total > 20;" # 大于20%股票持仓基金
if query_index == None:
query_index = self.quarter_index
self.cursor.execute(sql_query_season, [query_index]) # 执行sql语句
if quarter_index == None:
quarter_index = self.quarter_index
self.cursor.execute(sql_query_quarter, [quarter_index]) # 执行sql语句
results = self.cursor.fetchall() # 获取查询的所有记录
return results
# 分组查询特定股票的每个季度基金持有总数
def select_special_stock_fund_count(self, stock_name):
stock_sql_join = '('
for index in range(10):
stock_sql_join = stock_sql_join + \
"t.top_stock_%s_name = '%s' or " % (
str(index), stock_name)
# print(stock_sql_join[0:-1])
stock_sql_join = stock_sql_join[0:-3] + ')'
sql_query_sqecial_stock_fund_count = "SELECT count(1) as count, quarter_index FROM fund_morning_stock_info as t WHERE t.stock_position_total > 20 AND " + \
stock_sql_join + " GROUP BY t.quarter_index;" # 大于20%股票持仓基金
self.cursor.execute(sql_query_sqecial_stock_fund_count) # 执行sql语句
results = self.cursor.fetchall() # 获取查询的所有记录
return results

Loading…
Cancel
Save