转载自:python的爬虫与数据分析之路
原文地址: 基金抄底成功的概率有多大?python带你来分析
“抄底”指以某种估值指标衡量股价跌到最低点,尤其是短时间内大幅下跌时买入,预期股价将会很快反弹的操作策略。
拿今年的股市来说,可不畏是跌宕起伏啊,2月3日抄底的朋友肯定是赚的盆满钵满,而3月5日以后抄底的“菜菜”们心情就不那么美丽了,我就是其中的一个,总的情况可以用下图表示,心情哇凉哇凉的:
很多人都觉得抄底能赚钱,但是抄底成功的概率有多大呢?
下面带着大家从数据分析的角度寻找一下答案。
第一步:构建数据模型
用python爬取某基金网站任意10支基金数据,当天跌幅超过3%时,可判为抄底时刻,第二天涨幅大于2%时,判为抄底成功,否则判为失败,最后将所有基金的成功次数和失败次数分别相加,计算出成功概率。
第二步:python爬数据
1.打开基金网站,用浏览器自带流量分析工具找到数据接口
请求参数为:
其中callback为返回js回调函数,可以删除,funCode为基金代码,pageIndex为页码,pageSize为每页返回的数据条数是,startDate和endDate分别为开始时间和结束时间。
正常情况下应该是一页一页爬,但是我这颗躁动的心不愿安分,于是我把pageSize改为10000,代码如下
fundCode = '001618' #基金代码 pageIndex = 1 startDate = '2018-02-22' #起始时间 endDate = '2020-03-21' #截止时间 header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0', 'Referer': 'http://fundf10.eastmoney.com/jjjz_{0}.html'.format(fundCode) } url = 'http://api.fund.eastmoney.com/f10/lsjz?fundCode={0}&pageIndex={1}&pageSize=5000&startDate={2}&endDate={3}&_=1555586870418?'\ .format(fundCode, pageIndex, startDate, endDate) response = requests.get(url, headers=header)
输出结果为:
一下子全出来了,简直太意外了
这里有个网站的反爬措施大家需要注意一下,就是我在requests的头部信息中加入了Referer值,它会告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理,如果不加Referer,将会出错,这是一种常见的反爬措施。
用返回的数据画个业绩走势图,代码为:
minytick = (int(min(JZZZLs)/10)-1)*10 maxytick = (int(max(JZZZLs)/10)+1)*10 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 matplotlib.rcParams['axes.unicode_minus'] =False #显示负号 plt.figure(figsize=(15, 10), dpi=80) plt.title('基金折线图', color='y', fontweight=800, size=40) plt.scatter(x, JZZZLs, s=50, c='r') plt.plot(x, JZZZLs, c='b') plt.xticks(x[::len(x)-1], FSRQs[::len(x)-1], size=20) # x坐标 plt.ylim(minytick, maxytick) plt.yticks(range(minytick, maxytick, 10), size=20) plt.ylabel('%', size=50) plt.grid(axis="y") #生成网格''' plt.grid(axis="x") #生成网格''' plt.show()
结果为:
我就在那个最高的峰值上
说多了都是泪,还是接着分析吧!
第三步:按照数学模型对1支基金开始分析数据
参照第一步的数据模型,根据当天的收益判是否该抄底,再根据第二天收益情况判定是否抄底成功,代码如下:
for i, j in enumerate(result): # print(j) today = 0 if j['JZZZL'] != '': today = float(j['JZZZL']) # 当天收益 if today < -3: tall += 1 if float(result[i + 1]['JZZZL']) > 2: # 大于2时视为抄底成功 tsuccess += 1 else: tfail += 1
输出结果:
用matplotlib画出饼状图,代码如下
labels = ['成功', '失败'] sizes = [tsuccess, tfail] explode = (0, 0) plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False,startangle=150) plt.title("基金抄底成功概率") plt.show()
饼状图结果为:
从上图可以分析,2018-02-22至2020-03-21之间,该支基金总共可以抄底22次,成功3次,失败19次,成功率为位13.6%,看起来不是很理想。
第四步:对10支基金进行分析
随便找了10支基金,还是在这个时间段,将所有基金的成功次数和失败次数分别相加,计算出成功概率
输出结果为:
画出总的饼状图:
从10支基金的总结果来看,抄底成功的概率为24.6%,失败的概率为75.4%,相当于4次抄底只有1次能成功,感觉以后不能相信抄底了。
小结:本文以基金定投为切入线进行了1次简单的数据分析,所有结果仅以学习为主,不作为投资的依据,千万要慎重,不要像我一样登高望远,山顶太冷啊
更多案例源码视频加群:850591259