工具 : JQdata ,python2 matplotlib: 2.0.2 pandas: 0.16.2
样本: 上证指数 2005年至2018年8月18日
时间 | 休市前一分钟 | 休市前五分钟 | 下午开盘前一分钟 | 下午收盘前一分钟 | 下午收盘前五分钟 |
---|---|---|---|---|---|
上涨概率 | 0.55 | 0.66 | 0.63 | 0.8 | 0.7 |
平均幅度(%) | 0.0124 | 0.0038 | 0.0276 | 0.0269 | 0.0161 |
结论:
中午休市前,下午收盘前(最后一分钟拉升概率为0.8),会有一个特别明显的盘尾拉升现象,而下午开盘时会有一个较大概率的跳空高开。
从日内的平均走势来看及概率统计,一天的最佳入场时间是早上开盘(统计表明低开的概率和幅度要高于上涨,每年的平均低开概率最高达到75%,而且低开的概率总是大于高开(07年牛市除外))
日内早盘的最佳的最佳出场时间点10:30;下午盘相对比较强势,可以在13:10入场或14:00出场(当然不可能仅靠这个去做交易,不过可以根据这个选择一下进出场的时间)。
另外下午开盘时会大幅度上涨,然后下跌,所以中午休市应该不是一个合适的入场实际
最后只大致验证了一下开盘涨跌的情况,有兴趣的同学也可以试试其他几个时间点的概率和涨跌情况。
大家可以根据统计结果调整一下策略的买卖时间点,看看是否会产生意向不到的惊喜呢?
话不多说,直接上代码!
JQData申请地址
工具 : JQdata ,python2 matplotlib: 2.0.2 pandas: 0.16.2
样本: 上证指数 2005年至2018年8月18日
结论:
中午休市前,下午收盘前(最后一分钟拉升概率为0.8),会有一个特别明显的盘尾拉升现象,而下午开盘时会有一个较大概率的跳空高开。
从日内的平均走势来看及概率统计,一天的最佳入场时间是早上开盘(统计表明低开的概率和幅度要高于上涨,每年的平均低开概率最高达到75%,而且低开的概率总是大于高开(07年牛市除外))
日内早盘的最佳的最佳出场时间点10:30;下午盘相对比较强势,可以在13:10入场或14:00出场(当然不可能仅靠这个去做交易,不过可以根据这个选择一下进出场的时间)。
时间 | 休市前一分钟 | 休市前五分钟 | 下午开盘前一分钟 | 下午收盘前一分钟 | 下午收盘前五分钟 |
---|---|---|---|---|---|
上涨概率 | 0.55 | 0.66 | 0.63 | 0.8 | 0.7 |
平均幅度(%) | 0.0124 | 0.0038 | 0.0276 | 0.0269 | 0.0161 |
# 登 陆 (申请地址 : https://www.joinquant.com/default/index/sdk?f=home&m=banner)
from jqdatasdk import *
import pandas as pd
import matplotlib.pyplot as plt
# plt.rcParams['font.sans-serif']=['SimHei']
# mpl.rcParams['font.family']='SimHei' #用来正常显示中文 环境不同可能产生差异
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
auth('账号','密码')
# 数据获取
# fields_list = ['open', 'close', 'high', 'low', 'volume', 'money', 'avg', 'high_limit', 'low_limit', 'pre_close', 'paused', 'factor']
mdata = get_price('000001.XSHG',start_date='2005-01-01',end_date='2018-08-19',frequency='1m',fields=['close','pre_close'])
ddata = get_price('000001.XSHG',start_date='2005-01-01',end_date='2018-08-19',fields=['close','pre_close'])
# # 为了避免兼容或者其他如爆内存的问题,最好先将获取的数据保存到本地 dataframe建议保存为csv文件,panel建议保存为xls文件(to_excel)
# # mdata_.to_csv('000001m.CSV')
# # ddata_.to_csv('000001d.CSV')
# mdata = pd.read_csv('000001m.CSV',index_col=0)
# mdata.index = pd.to_datetime(mdata.index) #将索引转为datetime
# ddata = pd.read_csv('000001d.CSV',index_col=0)
# ddata.index = pd.to_datetime(ddata.index) #将索引转为datetime
# 数据计算
group_data = mdata.groupby(mdata.index.time).mean() #获取每个分钟的平均数据
pct_data = group_data.pct_change(-1,axis=1).close #获取上涨的平均幅度
p_data = (mdata.pct_change(-1,axis=1).close>0).groupby(mdata.index.time).mean() #获取上涨的平均概率
group_data.index = group_data.index.astype(str) #将time_index 转为 str_index 绘图时会需要
print ('下午收盘前5分钟平均上涨概率:%s'%round(p_data[-5:].mean(),2))
print ('下午收盘前最后一分钟上涨概率:%s'%round(p_data[-1],2))
print ('早盘休市前5分钟平均上涨概率:%s'%round(p_data[115:120].mean(),2))
print ('早盘最后一分钟上涨概率:%s'%round(p_data[119],2))
print ('下午开盘第一分钟上涨概率:%s'%round(p_data[120],2))
下午收盘前5分钟平均上涨概率:0.7 下午收盘前最后一分钟上涨概率:0.8 早盘休市前5分钟平均上涨概率:0.55 早盘最后一分钟上涨概率:0.66 下午开盘第一分钟上涨概率:0.63
print ('下午收盘前5分钟平均跌涨幅度:%s'%round(pct_data[-5:].mean(),6))
print ('下午收盘前最后一分钟跌涨幅度:%s'%round(pct_data[-1],6))
print ('早盘休市前5分钟平均跌涨幅度:%s'%round(pct_data[115:120].mean(),6))
print ('早盘最后一分钟跌涨幅度:%s'%round(pct_data[119],6))
print ('下午开盘第一分钟跌涨幅度:%s'%round(pct_data[120],6))
下午收盘前5分钟平均跌涨幅度:0.000161 下午收盘前最后一分钟跌涨幅度:0.000269 早盘休市前5分钟平均跌涨幅度:3.8e-05 早盘最后一分钟跌涨幅度:0.000124 下午开盘第一分钟跌涨幅度:0.000276
ax2 = (p_data-0.5).plot(kind='bar',figsize=(17,6),title = '平均每分钟跌涨概率及平均走势')
plt.axhline(0, c='k', linestyle="--")
group_data.close.plot(ax=ax2.twiny(),secondary_y=True,color='y')
<matplotlib.axes._subplots.AxesSubplot at 0x7f2d18150a90>
# 从数据上看开盘第一分钟总是大跌,绘制在一起看起来不够美观,所以剔除9:31分的数据
ax1 = (pct_data)[1:].plot(kind='bar',figsize=(17,6),title='平均日内走势及跌涨幅度')
plt.axhline(0, c='k', linestyle="--")
group_data.close[1:].plot(kind='line',ax=ax1.twiny(),secondary_y=True,color='y')
<matplotlib.axes._subplots.AxesSubplot at 0x7f2cfc2878d0>
pct_data = mdata.close.pct_change()
kp_data = pct_data[pct_data.index.time==datetime.time(9,31)]
pct = kp_data.groupby([kp_data.index.year])
ax1 = pct.mean().plot(kind='bar',figsize = (17,6),title='开盘第一分钟涨跌幅(相对于昨日收盘)')
ddata.close.plot(kind='line',ax=ax1.twiny(),secondary_y=True,color='y')
<matplotlib.axes._subplots.AxesSubplot at 0x7fc20c1f7d90>
p = (kp_data>0).groupby([kp_data.index.year])
ax1 = (p.mean()-0.5).plot(kind='bar',figsize = (17,6),title='开盘第一分钟涨跌概率(相对于昨日收盘)')
ddata.close.plot(kind='line',ax=ax1.twiny(),secondary_y=True,color='y')
<matplotlib.axes._subplots.AxesSubplot at 0x7fc1795e74d0>
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...