1、数据获取
天天基金 :gp股票型,hh混合型。。。
获取基金数据
import pandas as pd
import urllib.request
import requests
url1 = "http://fund.eastmoney.com/data/rankhandler.aspx?op=ph&dt=kf&ft=hh&rs=&gs=0&sc=6yzf&st=desc&sd=2020-04-29&ed=2021-04-29&pn=100"
headers = {
"Cookie":"AS*******206b6c9fb2844a=1619699955",
"Host":"fund.eastmoney.com",
"Referer":"http://fund.eastmoney.com/data/fundranking.html",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36",
}
kkk = requests.get(url1, headers =headers).text
m = ['datas', 'allRecords', 'pageIndex', 'pageNum', 'allPages', 'allNum', 'gpNum', 'hhNum', 'zqNum', 'zsNum',
'bbNum', 'qdiiNum', 'etfNum', 'lofNum', 'fofNum']
kkk1 = kkk[15:-1]
for c in m:
kkk1 = kkk1.replace(c, '"' + c + '"')
all =[]
for i in eval(kkk1)["datas"]:
all.append(i.split(",")[:16])
all_datass = pd.DataFrame(all,columns=["基金代码", "基金简称", "字母简称","日期", "单位净值", "产品链接","日增长率", "近一周", "近一月", "近三月","近六月", "近一年", "近两年", "近三年", "今年来","成立来"])
去字符串型空白值
import numpy as np
all_datass.replace(to_replace=r'^\s*$',value=np.nan,regex=True,inplace=True)
all_datass=all_datass.dropna()
获取夏普比率
夏普比率(Sharpe Ratio),又被称为夏普指数 --- 基金绩效评价标准化指标。夏普比率在现代投资理论的研究表明,风险的大小在决定组合的表现上具有基础性的作用。风险调整后的收益率就是一个可以同时对收益与风险加以考虑的综合指标,长期能够排除风险因素对绩效评估的不利影响。夏普比率就是一个可以同时对收益与风险加以综合考虑的三大经典指标之一。 投资中有一个常规的特点,即投资标的的预期报酬越高,投资人所能忍受的波动风险越高;反之,预期报酬越低,波动风险也越低。所以理性的投资人选择投资标的与投资组合的主要目的为:在固定所能承受的风险下,追求最大的报酬;或在固定的预期报酬下,追求最低的风险。
def formatrow1(row):
id = row["基金代码"]
url2 = 'http://fund.eastmoney.com/f10/tsdata_{}.html'.format(id)
tables2 = pd.read_html(url2)
shapes = tables2[1].iloc[1].to_list()
return shapes[1],shapes[2], shapes[3]
all_datass[["夏普比率(近1年)", "夏普比率(近2年)","夏普比率(近3年)"]] = all_datass.apply(formatrow1, axis=1, result_type="expand")
2、四四三三策略筛选基金
datass = all_datass
datass['rank'] = datass['近三年'].astype(float) * 0.3 + datass['近两年'].astype(float) * 0.25 + datass['近一年'].astype(float) * 0.2 + datass['近六月'].astype(float) * 0.15 + datass['近三月'].astype(float) * 0.1
datass.sort_values(by='rank', inplace=True,ascending=False)
datass1 = datass[:20]
datass1