量化策略:驾驭交易之轴心点研究(一)
2018-11-11 15:43
162 查看
- 最近在《驾驭交易》这本书时,发现个比较有意思的轴心点策略,基本原理跟常用的技术黄金分割线很像,都是来标识重要支撑和阻力位,非常适合短线交易者使用。
本篇文章主要尝试在中国股市基于日线级别做策略尝试研究,百度了下关于轴心点的策略公式定义版本很多,百度百科外汇轴心点定义为:
轴心点 :
(PP) = (High + Low + Close) / 3
第一级支撑和阻力位:
第一支撑位 (S1) = (2 * PP)– High
第一阻力位 (R1) = (2 * PP) – Low
第二级支撑和阻力位:
第二支撑位 (S2) = PP – (High– Low)
第二阻力位 (R2) = PP + (High –Low)
《驾驭交易》书中多了一个第三级支撑位和阻力位(吐槽一下:关于轴心点定义书里居然写错了,不知道翻译的问题,还是原书就错了)
第三级支撑和阻力位:
第三支撑位(S3) = S1 – (High – Low)
第三阻力位 (R3) = R1 + (High –Low)
话不多说,还是撸代码了。。。
- 定义策略公式
def get_piovt_points(high,low,close): #计算轴心 #驾驭交易计算公式:轴心点=(最高价+最低价+收盘价)/3 pp=round((high+low+close)/3,2) #驾驭交易计算公式:阻力1=2*轴心-最低价 obs1=round(pp*2-low,2) #驾驭交易计算公式:阻力2=轴心+(最高价-最低价) obs2=round(pp+(high-low),2) #驾驭交易计算公式:阻力3=阻力1+(最高价-最低价) obs3=round(obs1+(high-low),2) #驾驭交易计算公式:支撑1=2*轴心-最高价 cru1=round(pp*2-high,2) #驾驭交易计算公式:支撑2=轴心-(最高价-最低价) cru2=round(pp-(high-low),2) #驾驭交易计算公式:支撑3=支撑1-(最高价-最低价) cru3=round(cru1-(high-low),2) return [pp,obs1,obs2,obs3,cru1,cru2,cru3]
- 基于常用的Tuhare数据包获取,计算轴心点,支撑位和阻力位
def get_data(code,year): #获取测试数据 cons = ts.get_apis() sdate=year+'-01-01' edate=year+'-12-31' #周DF wdf=ts.bar(code, conn=cons,freq="W",start_date=sdate, end_date=edate) wdf=wdf.sort_index() wdata=np.array(wdf.loc[:,['high','low','close']]).tolist() wpp=[get_piovt_points(i[0],i[1],i[2]) for i in wdata ] #填头去尾规避数据修补周5问题 wpp.insert(0,[0.0,0.0,0.0,0.0,0.0,0.0,0.0]) wpp=wpp[:-1] #生成周PP的DF windex=wdf.index.values wcolumns=['wpp','wobs1','wobs2','wobs3','wcru1','wcru2','wcru3'] wdf=pd.DataFrame(wpp,index=windex,columns=wcolumns) #日DF ddf=ts.bar(code, conn=cons,freq="D",start_date=sdate, end_date=edate) ddf=ddf.sort_index() result = pd.concat([ddf,wdf],axis=1) #数据修补,将Nan的PP数据进行填充 result=result.fillna(method="bfill") #剔除开始无法计算PP数据 result=result[result.wpp>0.0] return result
此段代码主要是计算了周线图的周线图的轴心点,支撑位和阻力位,跟日线数据合并时数据修复时,填补周一到周五的轴心点数据,发现周五数据错位,所以采取填头去尾规避数据修补周5问题(wpp.insert(0,[0.0,0.0,0.0,0.0,0.0,0.0,0.0]),wpp=wpp[:-1]),如果大家有别的好的方法可以给我下意见,非常感谢。
- 所需要的数据计算完了,该是最有意思的画图了。
yearlt=['2011','2012','2013','2014','2015','2016','2017'] codelt=ts.get_concept_classified() codelt=np.array(codelt['code']).tolist() year=choice(yearlt) #print (year) code=choice(codelt) #print (code) df=get_data(code,year) #print (df) # 对tushare获取到的数据转换成candlestick_ohlc()方法可读取的格式 data_list = [] for dates,row in df.iterrows(): #print (dates,row) #print (type(dates)) # 将时间转换为数字 date_time =dates.date() #datetime.datetime.strptime(dates.date().strftime('%Y-%m-%d'),'%Y-%m-%d') t = date2num(date_time) open,close,high,low = row[1:5] datas = (t,open,high,low,close) data_list.append(datas) # 创建子图 print ('1111111111') plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 #有效 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 fig, ax = plt.subplots() fig.subplots_adjust(bottom=0.2) # 设置X轴刻度为日期时间 ax.xaxis_date() plt.xticks(rotation=45) plt.yticks() plt.title(u"股票代码:"+code) plt.xlabel(u"时间") plt.ylabel(u"股价(元)") candlestick_ohlc(ax,data_list,width=1.5,colorup='r',colordown='green') df['wpp'].plot(color = 'green',label='wpp') df['wobs1'].plot(color = 'skyblue',label='wobs1') df['wobs2'].plot(color = 'skyblue',label='wobs2') df['wobs3'].plot(color = 'skyblue',label='wobs3') df['wcru1'].plot(color = 'red',label='wcru1') df['wcru2'].plot(color = 'red',label='wcru2') df['wcru3'].plot(color = 'red',label='wcru3') plt.grid() plt.show()
策略回测主要使用2011年——2017年的股市数据,股票代码和年份需要使用随机选择原则。
- 测试了几个股票,效果图如下:
- 看了些图片发现了些问题:
时间断开,蜡烛图在图片显示时也出现断开现象了,下篇文章进行修复;
阻力位和支撑位貌似是有作用的,但是不是很明显,有好多噪声,可能原理还没研究明白,不清楚问题在哪;
-
持续更新中。。。
-
欢迎大家关注个人公众号大家一起来玩量化:
相关文章推荐
- alpha策略量化投资的实证研究(二)
- (京东量化)基于相关性的配对交易策略
- 量化策略经典战法——羊驼策略初步研究一
- 量化策略R-Breaker的实践与研究 二
- (京东量化)基于相关性的配对交易策略
- 量化策略R-Breaker实践与研究 一
- 量化策略研究的网站
- 量化进阶—— 具有狼性的沃尔夫波交易策略
- 量化交易 ,金融策略的基础!
- alpha策略量化投资的实证研究(一)
- 西蒙斯都在用的量化选股策略——风格轮动模型
- 不做高频,量化策略到底能不能战胜抛硬币?
- Linux智能手机安全策略研究
- BotVS趋势交易策略-RSI
- 股票量化交易回测框架pyalgotrade源码阅读(一) 推荐
- WeQuant交易策略—RSI
- WeQuant交易策略—NATR
- Java设计模式研究之策略模式
- 对于目前流行的量化投资与smart beta策略的一些看法
- R语言构建配对交易量化模型