量化交易——传统技术分析随机震荡指标STO的原理及实现_第1页
量化交易——传统技术分析随机震荡指标STO的原理及实现_第2页
量化交易——传统技术分析随机震荡指标STO的原理及实现_第3页
量化交易——传统技术分析随机震荡指标STO的原理及实现_第4页
量化交易——传统技术分析随机震荡指标STO的原理及实现_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、123456789101112131415161718192021222324252627282930313233343536373839404142434445量化交易一一传统技术分析随机震荡指标STO的原理及实现随机震荡指标STO(KD)与MACD类似的是,STO同样地使用了两条曲线来表示,不同的是STO的曲线范围限制在0到100之间。在设计的过程当中,其不仅要研究其收市价,同时还要包括近期所出现过的最高价及最彳氐价等。这样的设计可以综合了动呈观念和RSI及移动平均线的各个优点。作为一款动呈技术分析方法,其主要的目的是判断是否逬入了超买或超买的状态,从而帮助投资者预知价格逆转的时机。实现分

2、析过程可以参考前面的博文,这里不细讲。STO计算公式(维基解释):相关代码:importnumpyasnpimportmathimportrandomimportjsonimportmatplotlib.pyplotaspitimportsyssys.selrecursionlimil(10000)#date|open|high|low|close|volume|adjsuteddefget_stock_hist(num):s_his二np.genfromtxlCC:/Users/Haipeng/Desklop/pylhon/Korea/Korea_:03dCsy.format(num),de

3、limiter/)s.hi=s_his1:days=s_hi.shape0this_stock=foriinrange(1,days,1):this_day=iforkinrange(1,7):this_day.append(s_hiik)this_stock.append(this_day)printMaximumdateislen(this_stock)returnthis_stockdefget_price(D,p_tpe):ifpjpe=close,:pos=4;elifpjpessopen:pos=1;elifp_tpe=high*:pos=2;elifp_lpelow:pos=3;

4、else:pos=5price=stock_histD-1pos;returnpricedefget_ma(D,N):p_used=np.zeros(N);foriinrange(1,N+1J):p_used(i-1=stock_hist(D-1)-(i-1)4);ma=np.mean(p_used);returnmadefget_mar(fro,to,N):ma=foriinrange(fro,to+1):4647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

5、93949596979899100101102lAQma.append(gel_ma(i,N)returnma#DateOpenHighLowClosedefgetjuplesffrojo):res=fordinrange(fro,to+1):tmp=0tmp.append(d)tmp.append(get_price(d;open,)tmp.append(get_price(d;high)tmp.append(get_price(d;low*)tmp.append(get_price(d;close,)res.append(lmp)returnresdefgel_volume(fro,to)

6、:res=fordinrange(fro,to+1):num=1try:ifget_price(d;close*)getprice(d1,close):num=-1except:passres.append(numgel_price(d,volume)returnres#STO实现defget_STO(D,N):a=1.0/3defget_H_L(D,N):high=0low=0foriinrange(N):high=max(high,get_price(D-i;high,)low=min(low,get_price(D-i;low*)returnhighjowdefget_K(D,N):hi

7、gh=get_H_L(D,N)0low=get_H_L(D,N)1RSV=100*(getj)rice(D,*close*)-low)/(hlgh-low)ifD=N:returna*RSV+(1-a)*50else:returna*RSV+(1-a)*get_K(D-1,N)defget_D(D?N):ifD=N:returna*get_KD,N)+(1-a)*50else:returna*get_K(D,N)+(1-a)*get_D(D-1,N)K=get_K(D?N)D=get_D(D,N)returnK,Ddefgel_sto(fro?to):res=4Dfordinrange(fro

8、,to+1):res0.append(get_STO(d,9)0)res1.append(get_STO(d,9)1)returnres由以上按照定义实现的函数get.STO可以获取某一天的sto数据,再调用get_sto便可以获得一段日期内的数据列。可是由于get_STO中包含了多个递归函数,导致如果获取某段日期内的数据列时要重复多次递归调用.非常的低效率。故而整合以上两函数,可以以下面的函数get_STO_r来代替,将会大大提高计算速度:12345678910111213141516171819202122232425262728defgetSTO_r(fro,to,N):a=1.0/3d

9、efget_H_L(D,N):high=0low=0foriinrange(N):high=max(high,get_pnce(D-i;high*)low=min(low,get_price(D-i;low*)returnhighjowdefget_K(D,N):ifD=N:return50high=get_H_L(D,N)0low=get_H_L(D,N)1RSV=100*(getj)rice(D,*close,)-low)/(high-low)returna*RSV+(1-a)*get_K(D-1,N)K.res=fordinrange(1,to+1):K_res.append(get_K

10、(d,N)D_res=foriinrange(to):ifi=0:D_res.append(50)else:D_res.append(a*K_resi+(1.0-a)*D_res-1)K=K_resfro-1:D=D_resfro-1:returnK,D绘制k线图及STO指标绘图代码:123456789101112131415161718192021222324252627282930313233343536373839404142defplot_STO(fro,to):volume=get_volume(frotto)tmp=get_STO(fro,tO,9)K9=lmp0D9=tmp1ma

11、5=get_mar(fro,to,5)ma10=get_mar(fro,to,10)ma20=get_mar(fro,to,20)tuples=get_tuples(fro,to)date=dfordinrange(fro,to+1)fig=plt.figure(figsize=(8,5)p1=plt.subplot2grid(5;4),(0,0)?rowspan=3,colspan=4,axisbg=k,)pl.set_title(HStochasticOscillator(STO)H)p1.set_ylabel(PriceH)p1plol(dale,ma5,m)p1.plot(dale,m

12、a10;b*)pl.plot(date9ma20,y)p1legend(MA5TMA10VMA20*)p1.grid(True,color=W)candlestick_ohlc(p1,tuples,width=0.7,colorup=rcolordown=MgM)p2=plt.subplot2grid(5;4),(3,0)?colspan=4;axisbg=*c,)p2.set_ylabel(VolumeH)colors=foriinrange(len(volume):ifvolumei0:colors.append(green)volumei=-volumefielse:colors.app

13、end(red)p2.bar(date,volume,color=colors)p3=plt.subplot2grid(5;4),(4,0)?colspan=4;axisbg=*m,)p3.set_ylabel(STO)p3.set_xlabel(Dates)p3.plot(dale,K9,*rJ)p3.plot(dale,D9,*g-*)p3legend(CK9TD9J,loc=iJpperleft)plt.subplots_adjust(hspace=0)plt.show()#showtheplotonthescreenstock_hist=get_slock_hist(18)plot_S

14、TO(200,800)可得图1:为了看到更清晰,可缩短时间范围:#例如.可得图2plot_STO(420,520)(完)到李珊珊手里面嘅剪子,直觉话畀我知就走呀.但系都冇.等我企起身嚟,李珊珊已经畀旁边咂两个女仔拽住咗我只手。跟住就睇李珊珊扌查住剪子一步一步走向我,我心惊恐咁潛气,因为我唔知佢究竟要对我做乜。我就睇下佢好專佗嘅行到我隔离,然后缓缓瞰蹈低咗喊哇,我又冇要对你点呀.童倩你知唔知呀?就你呢种柔柔弱弱扮可怜瞰最畀我核突!珊珊睇我流眼泪,忽然都唔敢相想到屋企,唔知你爸爸而家啲1界点.眼泪瞬间就溢满咗眼眶。我眼光光瞰望住佢唔睇下自己系哮徳行,恃.边个嘅男人.你都唔睇下就够胆勾引?我今日如果唔畀你啲教训.得有点样你仲真系以为我好虾系唔系啊?-凌

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论