您好,欢迎访问三七文档
当前位置:首页 > 生活休闲 > 科普知识 > TB跨周期数据调用解决方案
1TB跨周期数据调用解决方案蔡云华深圳开拓者科技有限公司为什么需要跨周期调用?为了实现多时间周期的趋势共振系统;为了避免信号闪烁,或者在大的时间周期上可能会出现一根K线同时满足止盈和止损,或同时满足开仓和平仓条件等情况下,都需要在更小的时间周期上操作,而根据大的时间周期来确定进出场条件;跨周期调用的常用方法通过一定的算法在小周期上推算出对应的大周期的Bar数据,并进而根据这些BAR数据计算出大周期的技术指标----跨周期函数;通过TB读写数据库函数SetTBProfileString、GetTBProfileString,以数据库为纽带实现不同时间周期数据的调用。跨周期函数的总体思路先建立一个用户函数MtBar,在小时间周期上调用这个函数计算出小周期每根BAR对应的大时间周期的Bar数据,保存在序列变量中;虽然已经有了大周期的Bar数据,但由于时间周期的不同导致的多对一关系,我们还需要编写相应的跨周期技术指标函数;跨周期技术指标函数以保存的Bar数据序列变量为基础,再借助函数的其他返回值的协助,进一步在小周期图表上来实现大周期的技术指标。函数MtBar的算法要点总的原则:小周期数据组合出大周期数据;判断当前Bar是否对应的大周期的起始BAR;由于大周期数据的滞后性,计算时大周期和当前时间周期如何对应,有三种可能:用大周期上一根BAR收盘数据;用大周期当前BAR收盘数据(未来数据);用大周期当前BAR的盘中收盘数据。以日线调用周线举例日线周线盘中数据第一种算法第二种算法第三种算法第一周周一第一周周一无效数据第一周BAR数据第一周周一第一周周二第一周周一到周二无效数据第一周BAR数据第一周周一到周二第一周周三第一周周一到周三无效数据第一周BAR数据第一周周一到周三第一周周四第一周周一到周四无效数据第一周BAR数据第一周周一到周四第一周周五第一周BAR数据无效数据第一周BAR数据第一周BAR数据第二周周一第二周周一第一周BAR数据第二周BAR数据第二周周一第二周周二第二周周一到周二第一周BAR数据第二周BAR数据第二周周一到周二第二周周三第二周周一到周三第一周BAR数据第二周BAR数据第二周周一到周三第二周周四第二周周一到周四第一周BAR数据第二周BAR数据第二周周一到周四第二周周五第二周BAR数据第一周BAR数据第二周BAR数据第二周BAR数据数据滞后未来数据数据切分MtBar函数的使用说明参数:1、TimeFrame–目标时间周期2、BarsBack--目标时间周期BAR偏移1----对应前表的第一种算法;0----对应前表的第三种算法;3、几个引用参数用来返回计算出来的大周期BAR数据4、函数的返回值mtBarCnt,表示小周期中,从当前BAR回溯到大周期的前一根BAR的回溯Bar数月线周线日线4小时线小时线N分钟4032010080144024060NoCurBaroOPenHtoHighHtoLowHtoCloseHtoVolHtoOpenIntHt索引值开盘价最高价最低价收盘价成交量持仓量函数返回值mtBarCnt含义小周期(M5)大周期(M30)计算结果BarsBack=1BarsBack=0。。。返回值mtBarCnt返回值mtBarCnt9:309:309:30-9:349:00–9:2919:30–9:3419:359:30-9:399:00–9:2929:30–9:3929:409:30-9:449:00–9:2939:30–9:4439:459:30-9:499:00-9:2949:30–9:4949:509:30-9:549:00–9:2959:30–9:5459:559:30-9:599:00–9:2969:30–9:59610:0010:0010:00–10:049:30-9:59110:00–10:04110:0510:00–10:099:30-9:59210:00–10:09210:1010:00–10:149:30-9:59310:00–10:14310:3010:3010:30–10:3410:30–10:14110:30–10:34110:3510:30–10:3910:30–10:14210:30–10:39210:4010:30–10:4410:30–10:14310:30–10:44310:4510:30–10:4910:30–10:14410:30–10:49410:5010:30–10:5410:30–10:14510:30–10:54510:5510:30–10:5910:30–10:14610:30–10:596。。。部分算法(代码)当前BAR是否大周期起始BAR的判断条件If(TimeFrame==40320)//月线{CurTime=Month;PreTime=Month[1];}ElseIf(TimeFrame==10080)//周线{CurTime=IntPart(DateDiff(19700105,Date)/7);PreTime=IntPart(DateDiff(19700105,Date[1])/7);}Else//其他时间周期{CurTime=IntPart((DateDiff(19700105,date)*1440+Hour*60+Minute)/TimeFrame);PreTime=IntPart((DateDiff(19700105,date[1])*1440+Hour[1]*60+Minute[1])/TimeFrame);}condition=CurTime!=PreTime;部分算法(代码)根据当前BAR在大周期中位置的不同,更新大周期BAR数据If(CurrentBar==0)//如果是第一根Bar,CurBar=0{barCnt=0;CurBar=0;OpenHT=Open;HighHT=High;LowHT=Low;CloseHT=Close;VolHT=Vol;OpenIntHT=OpenInt;}Else{If(Condition)//如果在目标周期下,属于另一根K线,则CurBar加1{barCnt=1;CurBar=CurBar[1]+1;OpenHT=Open;HighhHT=High;LowHT=Low;VolHT=Vol;}Else//如果在目标周期下,属于同一根K线,则CurBar不变,但最高价和最低价要记录价格的变化,成交量要累加{barCnt=barCnt[1]+1;CurBar=CurBar[1];OpenHT=OpenHT[1];HighHT=Max(HighHT[1],High);LowHT=Min(LowHT[1],Low);VolHT=VolHT[1]+Vol;}//收盘价和持仓量总是取最新值CloseHT=Close;OpenIntHT=OpenInt;}部分算法(代码)根据参数BarsBack的值,返回大周期的BAR数据barCntSum=barCnt;If(BarsBack==0){barCntSum=0;}ElseIf(BarsBack==1){barCntSum=barCnt;}Else{Fori=2ToBarsBack{barCntSum=barCntSum+barCnt[barCntSum];}}oCurBar=CurBar;oOpenHT=OpenHT[barCntSum];oHighHT=HighHT[barCntSum];oLowHT=LowHT[barCntSum];oCloseHT=CloseHT[barCntSum];oVolHT=VolHT[barCntSum];oOpenIntHT=OpenIntHT[barCntSum];ReturnbarCnt;例子:显示MtBar函数执行结果我们下面举个例子,来看看,如何调用MtBar函数在小周期上计算大周期的Bar数据并通过注释语句显示出来。ParamsNumericTimeFrame(1440);//目标时间周期参数NumericBarsBack(1);VarsNumericSeriesmtBarCnt;NumericSeriesmtCurBar;NumericSeriesmtOpen;NumericSeriesmtHigh;NumericSeriesmtLow;NumericSeriesmtClose;NumericSeriesmtVol;NumericSeriesmtOpenInt;NumericrefCurBar;NumericrefOpen;NumericrefHigh;NumericrefLow;NumericrefClose;NumericrefVol;NumericrefOpenInt;代码(续)BeginmtBarCnt=MtBar(TimeFrame,BarsBack,refCurBar,refOpen,refHigh,refLow,refClose,refVol,refOpenInt);mtCurBar=refCurBar;mtOpen=refOpen;mtHigh=refHigh;mtLow=refLow;mtClose=refClose;mtVol=refVol;mtOpenInt=refOpenInt;Commentary(CurrentBar=+text(CurrentBar));Commentary(mtBarCnt=+text(mtBarCnt));Commentary(mtCurBar=+text(mtCurBar));Commentary(mtOpen=+text(mtOpen));Commentary(mtHigh=+text(mtHigh));Commentary(mtLow=+text(mtLow));Commentary(mtClose=+text(mtClose));Commentary(mtVol=+text(mtVol));Commentary(mtOpenInt=+text(mtOpenInt));End基于MtBar实现跨周期技术指标接下来我们可以建立一系列的跨周期技术指标函数来实现常用的技术指标计算。已经实现的有:函数名技术指标MtSummation跨周期求和MtMa跨周期均线MtMacd跨周期MACDMtKdj跨周期KDJMtRsi跨周期RSIMtBoll跨周期布林线MtDMI跨周期DMIMtATR跨周期ATR以MtSummation为例说明算法ParamsNumericSeriesPrice(1);NumericSeriesBarCnt(0);NumericLength(10);VarsNumericSeriesSumValue(0);Numerici;Numericj(0);BeginSumValue=0;Fori=1toLength{If(Price[j]InvalidNumeric){SumValue=SumValue+Price[j];j=j+BarCnt[j];}elseBreak;}ReturnSumValue;End跨周期应用实例交易规则:以日线的均线交叉来判断大趋势,在5分钟图表上操作;日线的短期均线上穿长期均线,趋势为多,只做多不做空;日线的短期均线下穿长期均线,趋势为空,只做空不做多;多头趋势下,5分钟的短期均线上穿长期均线,进场做多,向下交叉则多头平仓,但不反手;空头趋势下,5分钟的短期均线下穿长期均线,进场做空,向上交叉则空头平仓,但不反手;17实现代码(1)ParamsNumericTimeFrame(1440);//目标时间周期参数,参数说明参见MtBarNumericBarsBack(1);//目标时间周期BAR偏移参数,说明见MtBar函数NumericLength1(10);//大周期的短期均线周期NumericLength2(20);//大周期的长期均线周期NumericLength3(10);//小周期的短期均线周期NumericLength4(20);//小周期的长期均线周期Numeri
本文标题:TB跨周期数据调用解决方案
链接地址:https://www.777doc.com/doc-6172351 .html