涨停敢死队
2003年2月15日,《中国证券报》在头版刊发《涨停板敢死队》一文,首次披露了银河证券宁波解放南路营业部存在“涨停板敢死队”的情况,宁波敢死队自此进入公众视野。据了解,2003年,银河解放南路营业部4楼贵宾室,有专门做超短线的“三大高手”,手中有三四千万的资金,当时正是熊市,营业部绝大部分成交量都来自他们,1号人物叫徐强(人称“小徐”),2号人物姓吴,3号人物徐海鸥(人称“大徐”),此外,还有天一证券(现已改组为光大证券)解放南路营业部和义路营业部也出现“敢死队”,并构成了宁波涨停敢死队“三驾马车”阵势,一直延续至今。
涨停敢死队曾风靡一时,但涨停后第二天收益情况如何,如何进行统计,是否真的可以赚钱??
为了解开这个疑惑,我编写了如下代码进行统计。
主要思路是:
- 统计多个股票涨停后次日的收益情况
- 时间范围可选
结果
选择两个时间段,对3个不同指数上证50、上证中小、创业300的成分股进行验证,结果如下
总体来看虽然平均下来,单笔收益有2%,但统计的数据里,虽然剔除了新股上市时连续涨停的影响,但无法剔除并购重组、借壳上市等重大利好产生的连续多日涨停,这种涨停散户难以买入参与。因此从实际操作来说,散户追涨停会面临巨大的风险,因此不建议散户追涨停。
具体代码如下,可以设定股票名单或者指数,设定特定时间段,对于上市的新股,可以设定上市多少日后才进行统计。
函数为stockLimitCal(indexSymbol,startDate, endDate,afterIPODay=200)
代码如下
from jqdatasdk import *
import pandas as pd
import csv
from datetime import datetime, timedelta
auth('username','code')
def stockLimitStats(stockSymbol, startDate, endDate, afterIPODay=200):
performanceList=[]
stockInfo=get_security_info(stockSymbol)
stockName=stockInfo.display_name
IPODate=stockInfo.start_date
firstStartDate=IPODate timedelta(days=afterIPODay)
startDateF=datetime.strptime(startDate, "%Y-%m-%d")
endDateF=datetime.strptime(endDate, "%Y-%m-%d")
startDate=datetime.date(startDateF)
endDate=datetime.date(endDateF)
if firstStartDate<=startDate:
pass
else:
startDate=firstStartDate
if startDate>=endDate:
print("开始测算日期晚于结束日期")
return performanceList
else:
pass
df = get_price(stockSymbol, start_date=startDate, end_date=endDate, frequency='daily', fields=['high_limit',"close"],skip_paused=True, fq='pre')
for i in range(df.shape[0]):
if df.ix[i,0]==df.ix[i,1]:
if i<(df.shape[0]-1):
nextDayPerformance=(df.ix[i 1,1]/df.ix[i,1])-1
performanceList.append(nextDayPerformance)
else:
pass
else:
pass
print(stockSymbol " " stockName " 涨停" str(len(performanceList)) "次")
return performanceList
def stockLimitCal(indexSymbol,startDate, endDate,afterIPODay=200):
AList=get_index_stocks(indexSymbol, date=None)
finalList=[]
positive=0
negative=0
sum=0
average=0
for stockSymbol in AList:
performanceList=stockLimitStats(stockSymbol, startDate, endDate, afterIPODay)
finalList=finalList performanceList
for x in finalList:
if x>0:
positive =1
elif x<0:
negative =1
sum =x
average=sum/len(finalList)
print("不考虑区间最后一天,总共出现" str(len(finalList)) "次涨停")
print("平均收益:" str(average))
print("上涨概率:" str(positive/len(finalList)))
print("下跌概率:" str(negative/len(finalList)))
return [indexSymbol,average,positive/len(finalList),negative/len(finalList)]
startDate="2015-08-28"
endDate="2018-08-28"
indexSymbol="000016.XSHG"
indexList=["000016.XSHG","000046.XSHG","399012.XSHE"]
for indexSymbol in indexList:
resultList=stockLimitCal(indexSymbol,startDate, endDate)
outputFile = open("c:/result.csv", 'a',newline="")
outputWriter = csv.writer(outputFile)
outputWriter.writerow(resultList)
outputFile.close()