请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3364712 新帖:0

涨停敢死队你学不来---附代码统计涨停次日的收益情况(剔除上市新股)

蜡笔小新炒外汇发表于:5 月 10 日 00:34回复(1)

涨停敢死队

2003年2月15日,《中国证券报》在头版刊发《涨停板敢死队》一文,首次披露了银河证券宁波解放南路营业部存在“涨停板敢死队”的情况,宁波敢死队自此进入公众视野。据了解,2003年,银河解放南路营业部4楼贵宾室,有专门做超短线的“三大高手”,手中有三四千万的资金,当时正是熊市,营业部绝大部分成交量都来自他们,1号人物叫徐强(人称“小徐”),2号人物姓吴,3号人物徐海鸥(人称“大徐”),此外,还有天一证券(现已改组为光大证券)解放南路营业部和义路营业部也出现“敢死队”,并构成了宁波涨停敢死队“三驾马车”阵势,一直延续至今。

涨停敢死队曾风靡一时,但涨停后第二天收益情况如何,如何进行统计,是否真的可以赚钱??

为了解开这个疑惑,我编写了如下代码进行统计。

主要思路是:

  1. 统计多个股票涨停后次日的收益情况
  2. 时间范围可选

结果

选择两个时间段,对3个不同指数上证50、上证中小、创业300的成分股进行验证,结果如下
微信图片_20181130191702.png

总体来看虽然平均下来,单笔收益有2%,但统计的数据里,虽然剔除了新股上市时连续涨停的影响,但无法剔除并购重组、借壳上市等重大利好产生的连续多日涨停,这种涨停散户难以买入参与。因此从实际操作来说,散户追涨停会面临巨大的风险,因此不建议散户追涨停。

具体代码如下,可以设定股票名单或者指数,设定特定时间段,对于上市的新股,可以设定上市多少日后才进行统计。

函数为stockLimitCal(indexSymbol,startDate, endDate,afterIPODay=200)
微信图片_20181130003317.png

代码如下

from jqdatasdk import *
import pandas as pd
import csv
from datetime import datetime, timedelta # 导入datetime模块  


auth('username','code') #输入用户名密码

def stockLimitStats(stockSymbol, startDate, endDate, afterIPODay=200):
    #返回区间内股票在涨停后,第二天的收益情况。将第二天的收益加入到performanceList里。默认在上市后200天后才进行测算

    performanceList=[]
    stockInfo=get_security_info(stockSymbol)
    stockName=stockInfo.display_name
    IPODate=stockInfo.start_date #获得上市日期
    #firstStartDate用来表示,新股上市后,经历afterIPODay天,才考虑涨跌停
    firstStartDate=IPODate timedelta(days=afterIPODay)
    # print(firstStartDate)
    startDateF=datetime.strptime(startDate, "%Y-%m-%d") #
    endDateF=datetime.strptime(endDate, "%Y-%m-%d")
    startDate=datetime.date(startDateF)
    endDate=datetime.date(endDateF)
    #如果firstStartDate在startDate之前,则测算区间从startDate开始,反之从firstStartDate开始
    if firstStartDate<=startDate:
        pass
    else:
        startDate=firstStartDate
    #如果考虑IPO后,startDate比endDate晚,返回空list
    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')
    # print(df.shape[0])
    # print(df)

    for i in range(df.shape[0]):
        if df.ix[i,0]==df.ix[i,1]:
            # print(df.ix[i,:])
            #将涨停次日加入resultList,但如果在测算区间最后一天涨停,则不考虑次日情况,
            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(performanceList)
    print(stockSymbol " " stockName " 涨停" str(len(performanceList)) "次")

    return performanceList



def stockLimitCal(indexSymbol,startDate, endDate,afterIPODay=200):
    # SZList=get_index_stocks("399106.XSHE", date=None)
    # SHList=get_index_stocks("000001.XSHG", date=None)
    # AStockList=SHList SZList # 获得全部A股列表
    AList=get_index_stocks(indexSymbol, date=None)#获取上证50股票列表
    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()

全部回复

0/140

达人推荐

量化课程

    移动端课程