查看原文
其他

用python来分析:基金抄底成功的概率有多大?

小dull鸟 凹凸数据 2021-08-09
每晚九点,我们准时相约  


大家好,我是朱小五


“抄底”指以某种估值指标衡量股价跌到最低点,尤其是短时间内大幅下跌时买入,预期股价将会很快反弹的操作策略。


拿今年的股市来说,可不畏是跌宕起伏啊,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次简单的数据分析,所有结果仅以学习为主,不作为投资的依据,千万要慎重,不要像我一样登高望远,山顶太冷啊!



原创文章:小dull鸟,公众号「ython的爬虫与数据分析之路」

整理排版:朱小五,公众号「凹凸数据」



文中相关源码

关注公众号「凹凸数据」后台回复“基金”即可获取






近期文章,点击图片即可查看






后台回复关键词「进群」,即刻加入读者交流群~


永远在“抄底”的路上。

朱小五

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存