小白入驻CSDN,从年初开始学习Python,越学习越觉得Python的强大。想把自己的学习历程记录下来,就从这一篇开始吧!冲!
都说股市有风险,追涨抄底,我们成功了多少次?
1.背景
抄底、追涨,两种股市中常见的搏短期收益的方式,总是让人又爱又恨。下图生动的体现了大多数人的经历,抄底却永不见底。不不说,我之前也会在A股大跌后抄底,但是收效甚微,甚至亏损。这就让我反思起来,抄底,或者追涨,成功率有多少?
2.准备工作和假设
2.1 本文使用Python3.8.2,引入requests和json来进行分析。
2.2 本文的数据来源于东方财富网的基金数据,为了使结果有参考性和代表性,我使用了博时沪深300指数A(050002)来作为标的。
2.3
3.数据收集
3.1 东方财富网有反爬措施,因此设置了header。
3.2 url中,fundCode为基金代码,pageSize为一页显示的数据条数,默认为20条。为了收集更多数据,我设置了5000条。startDate和endDate分别为起始日期和结束日期。
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_050002.html'#.format(fundCode)
}
url = 'http://api.fund.eastmoney.com/f10/lsjz?fundCode=050002&pageIndex=1&pageSize=5000&startDate=2012-04-01&endDate=2020-04-24&_=1588218413927'
response = requests.get(url, headers=header)
# print(response) 返回200,可以使用
html_text = response.text
data = json.loads(html_text)
3.3 得到的数据格式如下:
{'FSRQ': '2015-07-17', 'DWJZ': '1.2828', 'LJJZ': '3.2628', 'SDATE': None, 'ACTUALSYI': '', 'NAVTYPE': '1', 'JZZZL': '3.75', 'SGZT': '开放申购', 'SHZT': '开放赎回', 'FHFCZ': '', 'FHFCBZ': '', 'DTYPE': None, 'FHSP': ''}
3.4 通过关键字提取需要的数据累计净值,并放在list中,一共获得了1966条数据。
3.5 创建变量来记录抄底次数tall,成功次数twin,失败次数tfail,并通过循环进行判断每一次抄底是否成功。判断标准是:前一天基金跌幅达到一定程度(从-1%到-9%),就抄底,如果第二天收涨1%,则视为成功。 将结果放置于列表test中。
3.6 追涨的判断类似。
list = []
for day_data in data['Data']['LSJZList'][::-1]: # 倒着取数据,从最早的日期开始
# date = day_data['FSRQ'] # 日期
# value = day_data['DWJZ'] # 单位净值
rate = day_data['JZZZL'] # 累计净值
try: # 净值默认为str,需要转换,有的数据会报错,因此使用了try-except
rate = float(rate)
except:
continue
list.append(rate)
length = (len(list)) # 返回1966
test = [['下跌幅度','抄底次数','抄底成功次数','抄底失败次数','成功率']]
for x in range(-1,-10,-1):
today = 0
tall = 0
twin = 0
tfail = 0
while(today < length - 1):
if(list[today] < x):
tall += 1
if(list[today + 1] > 1):
twin += 1
else:
tfail += 1
if(tall == 0):
winrate_str = "0%"
else:
winrate = round(twin/tall,4)
winrate_str = str(winrate)[2:4]+'%'
fluc = str(x)+'%'
today += 1
test.append([fluc,tall,twin,tfail,winrate_str])
test1 = [['上涨幅度','追涨次数','追涨成功次数','追涨失败次数','成功率']]
for x in range(1,10):
today = 0
tall = 0
twin = 0
tfail = 0
while(today < length - 1):
if(list[today] > x):
tall += 1
if(list[today + 1] > 1):
twin += 1
else:
tfail += 1
if(tall == 0):
winrate_str = "0%"
else:
winrate = round(twin/tall,4)
winrate_str = str(winrate)[2:4]+'%'
fluc = str(x)+'%'
today += 1
test1.append([fluc,tall,twin,tfail,winrate_str])
3.7 通过循环遍历test和test1,结果如下:
for i in test: # 抄底
for ii in i:
print(ii,end = ' ')
print()
for i in test1: # 追涨
for ii in i:
print(ii,end = ' ')
print()
———————————————————————————————————————————————————————————————————————————————————————
下跌幅度 抄底次数 抄底成功次数 抄底失败次数 成功率
-1% 291 68 223 23%
-2% 101 30 71 29%
-3% 47 18 29 38%
-4% 25 12 13 48%
-5% 18 8 10 44%
-6% 14 6 8 42%
-7% 6 2 4 33%
-8% 2 0 2 0%
-9% 0 0 0 0%
上涨幅度 追涨次数 追涨成功次数 追涨失败次数 成功率
1% 349 75 274 21%
2% 137 35 102 25%
3% 45 10 35 22%
4% 16 5 11 31%
5% 6 3 3 5%
6% 3 2 1 66%
7% 0 0 0 0%
8% 0 0 0 0%
9% 0 0 0 0%
4.结论
4.1 抄底
- 在跌幅为-4%到-6%的范围内,抄底成功率较高,但都未超过50%。
- 跌幅小于3%(绝对值)时,成功率较低,可以理解为正常震荡范围。
- 跌幅大于6%(绝对值)时,成功率也很低,因为出现这种较大跌幅的情况,一般都是有大利空,一时半会不会止跌。
4.2 追涨
- 惨不忍睹。
- 虽然涨幅到6%的时候,有较高成功率,但是样本较少,参考价值不大。
4.3 可能还是定投好一点吧,股市有收益就有相应的风险啊…
参考文章:
[1] 基金抄底成功的概率有多大?python带你来分析 https://mp.weixin.qq.com/s/POGmQTni4lVqMTuYWhH6ZA