feat: add certain conditions

main
jackluson 3 years ago
parent cf669cd33f
commit 8772188e64

@ -8,7 +8,7 @@ Author: luxuemin2108@gmail.com
-----
Copyright (c) 2020 Camel Lu
'''
import time
from pprint import pprint
import pandas as pd
from fund_info.statistic import FundStatistic
@ -72,10 +72,12 @@ if __name__ == '__main__':
'value': 5,
'operator': '='
}
last_year_time = time.localtime(time.time() - 365 * 24 * 3600)
last_year_date = time.strftime('%Y-%m-%d', last_year_time)
condition_dict = {
'morning_star_rating_5': morning_star_rating_5_condition,
'morning_star_rating_3': morning_star_rating_3_condition,
'manager_start_date': '2020-05-25'
# 'manager_start_date': '2020-05-25'
}
fund_code_pool = each_statistic.select_fund_pool(
**condition_dict,
@ -89,10 +91,10 @@ if __name__ == '__main__':
pprint(stock_top_list)
print(len(stock_top_list))
filter_list = stocks_compare(stock_top_list, fund_code_pool)
# filter_list = stocks_compare(stock_top_list, fund_code_pool)
pprint(filter_list)
pprint(len(filter_list))
# pprint(filter_list)
# pprint(len(filter_list))
# df_filter_list = pd.DataFrame(filter_list, columns=[
# '名称', '2021-Q1持有数量', '2020-Q4持有数量', '环比', '环比百分比', '升Or降'])
# print(df_filter_list)

@ -9,15 +9,32 @@ Copyright (c) 2021 Camel Lu
'''
from sql_model.fund_query import FundQuery
import pandas as pd
from openpyxl import load_workbook
from pprint import pprint
if __name__ == '__main__':
each_query = FundQuery()
high_score_funds = each_query.select_high_score_funds()
columns = ['代码', '名称', '季度', '总资产', '起始时间', '投资风格', '三月最大回撤', '六月最大回撤', '夏普比率', '阿尔法系数', '贝塔系数',
'R平方', '标准差', '风险系数', '两年风险评级', '三年风险评级', '五年风险评级', '五年晨星评级', '三年晨星评级', '股票仓位', '十大持股仓位']
quarter_index = '2020-Q4'
high_score_funds = each_query.select_high_score_funds(
quarter_index=quarter_index)
columns_bk = ['代码', '名称', '季度', '总资产', '现任基金经理管理起始时间', '投资风格', '三月最大回撤', '六月最大回撤', '夏普比率', '阿尔法系数', '贝塔系数',
'R平方', '标准差', '风险系数', '两年风险评级', '三年风险评级', '五年风险评级', '五年晨星评级', '三年晨星评级', '股票仓位', '十大持股仓位']
columns = ['代码', '名称', '投资风格', '基金经理', '现任经理管理起始时间', '成立时间', '三年晨星评级', '五年晨星评级', '夏普比率', '股票仓位', '十大持股仓位',
'两年风险评级', '三年风险评级', '五年风险评级', '阿尔法系数', '贝塔系数', '标准差', '总资产', '数据更新时间']
df_high_score_funds = pd.DataFrame(high_score_funds, columns=columns)
pprint(df_high_score_funds)
df_high_score_funds.to_excel(
'./output/xlsx/high-score-funds.xlsx', sheet_name='2021-Q1')
# df_high_score_funds.to_excel(
# './output/xlsx/high-score-funds_log.xlsx', sheet_name=quarter_index)
# with pd.ExcelWriter('./output/xlsx/high-score-funds_log.xlsx', engine='openpyxl') as writer:
# df_high_score_funds.to_excel(writer, sheet_name=quarter_index)
# df_high_score_funds.to_excel(writer, sheet_name=quarter_index)
# df2.to_excel(writer, sheet_name='Sheet2')
path = './output/xlsx/high-score-funds_log.xlsx'
writer = pd.ExcelWriter(path, engine='openpyxl')
book = load_workbook(path)
writer.book = book
df_high_score_funds.to_excel(writer, sheet_name=quarter_index)
writer.save()
writer.close()

@ -12,10 +12,11 @@ from threading import Lock
from db.connect import connect
def format_sql(table_name, field_dict, prefix="AND"):
print("field_dict", field_dict['name'])
def format_sql(table_name, field_name, field_dict, prefix="AND"):
sql_str = ''
field_name = field_dict.get('name')
if not field_name or not isinstance(field_dict, dict):
return sql_str
# field_name = field_dict.get('name')
field_value = field_dict.get('value')
operator = field_dict.get('operator')
if not field_name or not field_value or not operator:
@ -91,7 +92,18 @@ class FundQuery:
if quarter_index == None:
quarter_index = self.quarter_index
sql = "SELECT a.fund_code, b.fund_name, a.quarter_index, a.total_asset , a.manager_start_date, \
sql = "SELECT a.fund_code, b.fund_name, a.investname_style, c.name, a.manager_start_date, b.found_date, a.morning_star_rating_3, \
a.morning_star_rating_5, a.risk_assessment_sharpby, a.stock_position_total, a.stock_position_ten,\
a.risk_rating_2, a.risk_rating_3, a.risk_rating_5,\
a.risk_statistics_alpha, a.risk_statistics_beta, a.risk_assessment_standard_deviation,\
a.total_asset, a.quarter_index FROM fund_morning_quarter as a \
LEFT JOIN fund_morning_base AS b ON a.fund_code = b.fund_code \
LEFT JOIN fund_morning_manager AS c ON c.manager_id = a.manager_id \
WHERE b.fund_name NOT LIKE '%%C' AND b.fund_name NOT LIKE '%%E' AND b.fund_name NOT LIKE '%%H' AND b.fund_name NOT LIKE '%%指数%%' AND a.quarter_index = %s AND \
a.morning_star_rating_5 >= 3 AND a.morning_star_rating_3 = 5 AND a.stock_position_total >= 50 AND a.stock_position_ten <= 60 \
AND a.risk_assessment_sharpby > 1 AND a.risk_rating_2 > 1 AND a.risk_rating_3 > 1 AND a.risk_rating_5 > 1 AND a.manager_start_date < %s \
ORDER BY a.risk_assessment_sharpby DESC, a.risk_statistics_alpha DESC;"
sql_bk = "SELECT a.fund_code, b.fund_name, a.quarter_index, a.total_asset , a.manager_start_date, \
a.investname_style, a.three_month_retracement, a.june_month_retracement, a.risk_assessment_sharpby,\
a.risk_statistics_alpha, a.risk_statistics_beta, a.risk_statistics_r_square, a.risk_assessment_standard_deviation,\
a.risk_assessment_risk_coefficient, a.risk_rating_2, a.risk_rating_3, a.risk_rating_5, a.morning_star_rating_5,\
@ -99,36 +111,72 @@ class FundQuery:
LEFT JOIN fund_morning_base AS b ON a.fund_code = b.fund_code \
WHERE b.fund_name NOT LIKE '%%C' AND b.fund_name NOT LIKE '%%E' AND a.quarter_index = %s AND \
a.morning_star_rating_5 >= 3 AND a.morning_star_rating_3 = 5 AND a.stock_position_total >= 50 AND a.stock_position_ten <= 60 \
AND a.risk_assessment_sharpby >1 AND a.risk_rating_2 > 1 AND a.risk_rating_3 > 1 AND a.risk_rating_5 > 1 AND a.manager_start_date < %s ORDER BY a.risk_assessment_sharpby DESC , a.three_month_retracement DESC "
AND a.risk_assessment_sharpby >1 AND a.risk_rating_2 > 1 AND a.risk_rating_3 > 1 AND a.risk_rating_5 > 1 AND a.manager_start_date < %s \
ORDER BY a.risk_assessment_sharpby DESC, a.risk_rating_5 DESC;"
self.lock.acquire()
self.cursor.execute(sql, [quarter_index, last_year_date]) # 执行sql语句
results = self.cursor.fetchall() # 获取查询的所有记录
self.lock.release()
return results
def select_certain_condition_funds(self, *, quarter_index=None, morning_star_rating_5=None, morning_star_rating_3=None, manager_start_date=None):
def select_certain_condition_funds(self, *, quarter_index=None, morning_star_rating_5=None, morning_star_rating_3=None, manager_start_date=None, stock_position_total=None, stock_position_ten=None, **rest_dicts):
print("rest_dicts", rest_dicts)
if quarter_index == None:
quarter_index = self.quarter_index
last_year_time = time.localtime(time.time() - 365 * 24 * 3600)
last_year_date = time.strftime('%Y-%m-%d', last_year_time)
morning_star_rating_3_sql = format_sql('a', {
'name': 'morning_star_rating_3',
**morning_star_rating_3
})
# site = {"name": "菜鸟教程", "url": ""}
morning_star_rating_3_sql = format_sql(
'a', 'morning_star_rating_3', morning_star_rating_3)
morning_star_rating_5_sql = format_sql(
'a', 'morning_star_rating_5', morning_star_rating_5)
manager_start_date_sql = format_sql(
'a', 'manager_start_date', manager_start_date)
stock_position_total_sql = format_sql(
'a', 'stock_position_total', stock_position_total)
stock_position_ten_sql = format_sql(
'a', 'stock_position_ten', stock_position_ten)
risk_assessment_sharpby = rest_dicts.get('risk_assessment_sharpby')
risk_assessment_sharpby_sql = format_sql(
'a', 'risk_assessment_sharpby', risk_assessment_sharpby)
risk_rating_2 = rest_dicts.get('risk_rating_2')
risk_rating_2_sql = format_sql(
'a', 'risk_rating_2', risk_rating_2)
risk_rating_3 = rest_dicts.get('risk_rating_3')
risk_rating_3_sql = format_sql(
'a', 'risk_rating_3', risk_rating_3)
risk_rating_5 = rest_dicts.get('risk_rating_5')
risk_rating_5_sql = format_sql(
'a', 'risk_rating_5', risk_rating_5)
# print("网站名:{name}, 地址 {url}".format(**site))
# if morning_star_rating_5 not None:
sql = "SELECT a.fund_code FROM fund_morning_quarter as a \
LEFT JOIN fund_morning_base AS b ON a.fund_code = b.fund_code \
WHERE a.quarter_index = '{quarter_index}' AND b.fund_name NOT LIKE '%%C' AND b.fund_name NOT LIKE '%%E' {morning_star_rating_5} {morning_star_rating_3} AND a.stock_position_total >= 50 AND a.stock_position_ten <= 60 \
AND a.risk_assessment_sharpby >1 AND a.risk_rating_2 > 1 AND a.risk_rating_3 > 1 AND a.risk_rating_5 > 1 AND a.manager_start_date < '{manager_start_date}'"
WHERE a.quarter_index = '{quarter_index}' AND b.fund_name NOT LIKE '%%C' AND b.fund_name NOT LIKE '%%E' {morning_star_rating_5} {morning_star_rating_3} {stock_position_total} {stock_position_ten} \
{risk_assessment_sharpby} {risk_rating_2} {risk_rating_3} {risk_rating_3} {manager_start_date}"
format_dict = {
'quarter_index': quarter_index,
'morning_star_rating_5': "AND a.morning_star_rating_5 >= 3",
'morning_star_rating_5': morning_star_rating_5_sql,
'morning_star_rating_3': morning_star_rating_3_sql,
'manager_start_date': str(last_year_date)
'manager_start_date': manager_start_date_sql,
'stock_position_total': stock_position_total_sql,
'stock_position_ten': stock_position_ten_sql,
'risk_assessment_sharpby': risk_assessment_sharpby_sql,
'risk_rating_2': risk_rating_2_sql,
'risk_rating_3': risk_rating_3_sql,
'risk_rating_5': risk_rating_5_sql
}
sql_format = sql.format(**format_dict)
self.lock.acquire()

Loading…
Cancel
Save