《TB跨周期数据调用解决方案ppt课件.ppt》由会员分享,可在线阅读,更多相关《TB跨周期数据调用解决方案ppt课件.ppt(30页珍藏版)》请在三一办公上搜索。
1、1,TB跨周期数据调用解决方案,蔡云华深圳开拓者科技有限公司,为什么需要跨周期调用?,为了实现多时间周期的趋势共振系统;为了避免信号闪烁,或者在大的时间周期上可能会出现一根K线同时满足止盈和止损,或同时满足开仓和平仓条件等情况下,都需要在更小的时间周期上操作,而根据大的时间周期来确定进出场条件;,跨周期调用的常用方法,通过一定的算法在小周期上推算出对应的大周期的Bar数据,并进而根据这些BAR数据计算出大周期的技术指标-跨周期函数;通过TB读写数据库函数SetTBProfileString、GetTBProfileString,以数据库为纽带实现不同时间周期数据的调用。,跨周期函数的总体思路,
2、先建立一个用户函数MtBar,在小时间周期上调用这个函数计算出小周期每根BAR 对应的大时间周期的Bar数据,保存在序列变量中;虽然已经有了大周期的Bar数据,但由于时间周期的不同导致的多对一关系,我们还需要编写相应的跨周期技术指标函数;跨周期技术指标函数以保存的Bar数据序列变量为基础,再借助函数的其他返回值的协助,进一步在小周期图表上来实现大周期的技术指标。,函数MtBar的算法要点,总的原则:小周期数据组合出大周期数据;判断当前Bar是否对应的大周期的起始BAR;由于大周期数据的滞后性,计算时大周期和当前时间周期如何对应,有三种可能:用大周期上一根收盘数据;用大周期当前收盘数据(未来数据
3、);用大周期当前BAR的盘中收盘数据。,以日线调用周线举例,MtBar函数的使用说明,参数:1、TimeFrame 目标时间周期 2、BarsBack - 目标时间周期BAR偏移1 - 对应前表的第一种算法;0 - 对应前表的第三种算法; 3、几个引用参数用来返回计算出来的大周期BAR数据 4、函数的返回值mtBarCnt,表示小周期中,从当前BAR 回溯到大周期的前一根BAR的回溯Bar数,函数返回值mtBarCnt含义,部分算法(代码),当前BAR是否大周期起始BAR的判断条件If (TimeFrame = 40320) / 月线CurTime = Month;PreTime = Mont
4、h1;Else If (TimeFrame = 10080) / 周线CurTime = IntPart(DateDiff(19700105,Date)/7);PreTime = IntPart(DateDiff(19700105,Date1)/7);Else / 其他时间周期CurTime = IntPart(DateDiff(19700105,date)*1440 + Hour*60 + Minute)/TimeFrame);PreTime = IntPart(DateDiff(19700105,date1)*1440 + Hour1*60 + Minute1)/TimeFrame); c
5、ondition = CurTime != PreTime;,部分算法(代码),根据当前BAR在大周期中位置的不同,更新大周期BAR数据If (CurrentBar=0) / 如果是第一根Bar, CurBar=0barCnt = 0;CurBar = 0;OpenHT = Open;HighHT = High;LowHT = Low;CloseHT = Close;VolHT = Vol;OpenIntHT = OpenInt;ElseIf(Condition) / 如果在目标周期下,属于另一根K线,则CurBar加1 barCnt = 1;CurBar = CurBar1 + 1;,Ope
6、nHT = Open;HighhHT = High;LowHT = Low;VolHT = Vol;Else/ 如果在目标周期下,属于同一根K线,则CurBar不变,但最高价和最低 价要记录价格的变化,成交量要累加barCnt = barCnt1 + 1;CurBar = CurBar1;OpenHT = OpenHT1;HighHT = Max(HighHT1,High);LowHT = Min(LowHT1,Low);VolHT = VolHT1 + Vol;/ 收盘价和持仓量总是取最新值CloseHT = Close;OpenIntHT = OpenInt;,部分算法(代码),根据参数B
7、arsBack的值,返回大周期的BAR数据 barCntSum = barCnt ; If(BarsBack = 0) barCntSum = 0 ; Else If(BarsBack = 1) barCntSum = barCnt ; Else For i = 2 To BarsBack barCntSum = barCntSum + barCntbarCntSum; oCurBar = CurBar; oOpenHT = OpenHTbarCntSum; oHighHT = HighHTbarCntSum; oLowHT = LowHTbarCntSum; oCloseHT = Close
8、HTbarCntSum; oVolHT = VolHTbarCntSum; oOpenIntHT = OpenIntHTbarCntSum; Return barCnt;,例子:显示MtBar函数执行结果,我们下面举个例子,来看看,如何调用MtBar函数在小周期上计算大周期的Bar数据并通过注释语句显示出来。 ParamsNumeric TimeFrame(1440); / 目标时间周期参数Numeric BarsBack(1); VarsNumericSeries mtBarCnt;NumericSeries mtCurBar;NumericSeries mtOpen;NumericSeri
9、es mtHigh;NumericSeries mtLow;NumericSeries mtClose;NumericSeries mtVol;NumericSeries mtOpenInt; Numeric refCurBar;Numeric refOpen;Numeric refHigh;Numeric refLow;Numeric refClose;Numeric refVol;Numeric refOpenInt;,代码(续),BeginmtBarCnt = MtBar(TimeFrame,BarsBack,refCurBar,refOpen,refHigh,refLow,refClo
10、se,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);Comment
11、ary(mtHigh=+text(mtHigh);Commentary(mtLow=+text(mtLow);Commentary(mtClose=+text(mtClose);Commentary(mtVol=+text(mtVol);Commentary(mtOpenInt=+text(mtOpenInt);End,基于MtBar实现跨周期技术指标,接下来我们可以建立一系列的跨周期技术指标函数来实现常用的技术指标计算。已经实现的有:,以MtSummation为例说明算法,Params NumericSeries Price(1); NumericSeries BarCnt(0); Nume
12、ric Length(10);Vars NumericSeries SumValue(0); Numeric i; Numeric j(0);Begin SumValue = 0; For i = 1 to Length If (Pricej InvalidNumeric) SumValue = SumValue + Pricej; j = j + BarCntj; else Break; Return SumValue;End,17,跨周期应用实例,交易规则:以日线的均线交叉来判断大趋势,在5分钟图表上操作;日线的短期均线上穿长期均线,趋势为多,只做多不做空;日线的短期均线下穿长期均线,趋势
13、为空,只做空不做多;多头趋势下,5分钟的短期均线上穿长期均线,进场做多,向下交叉则多头平仓,但不反手;空头趋势下,5分钟的短期均线下穿长期均线,进场做空,向上交叉则空头平仓,但不反手;,18,实现代码 (1),Params Numeric TimeFrame(1440); / 目标时间周期参数,参数说明参见MtBar Numeric BarsBack(1); / 目标时间周期BAR偏移参数,说明见MtBar函数 Numeric Length1(10); / 大周期的短期均线周期 Numeric Length2(20); / 大周期的长期均线周期 Numeric Length3(10); / 小
14、周期的短期均线周期 Numeric Length4(20); / 小周期的长期均线周期 Numeric Lots(1);Vars NumericSeries MA1; NumericSeries MA2; Numeric oMA1; Numeric oMA2; NumericSeries MA3; NumericSeries MA4;,19,实现代码(2),Begin MtMa(TimeFrame,BarsBack,Length1,oMA1); MA1 = oMA1; PlotNumeric(MA1,MA1); MtMa(TimeFrame,BarsBack,Length2,oMA2); MA
15、2 = oMA2; PlotNumeric(MA2,MA2); MA3 = AverageFC(Close,Length3); MA4 = AverageFC(Close,Length4); PlotNumeric(MA3,MA3); PlotNumeric(MA4,MA4); If (MA1MA2) / 大周期均线金叉,多头趋势 if (MarketPosition!=1 and MA31MA41) Buy(Lots,Open);,20,实现代码(3), if (MarketPosition=1 and MA31MA41) BuyToCover(Lots,Open); End,通过读写文件实
16、现跨周期调用,同时打开不同时间周期的两个图表,通过TB中读写公式信息文件的函数,实现两个图表间的数据调用;在大周期图表上新建一个公式应用,通过写信息文件函数SetTBProfileString将大周期的BAR数据或技术指标写到数据库中;然后在小周期图表上新建公式应用,通过读信息文件函数GetTBProfileString从数据库中读取大周期的Bar数据或技术指标,从而实现跨周期调用; (见下图),图表1,图表2,相关函数用法,SetTBProfileString 写信息文件参数1:String strSection - 指定的信息块的块名参数2:String strKey - 指定的信息的键名
17、参数3:String strValue - 写入的字符串信息GetTBProfileString 读信息文件参数1:String strSection参数2:String strKey,跨周期调用举例,以5分钟周期调用日线指标数据为例;新建工作区,包含两个图表窗口,一个选日线,一个选5分钟周期;新建公式应用MyDayMa,插入到日线图表中,实现将日线图的均线指标写入到数据库;新建公式应用MyMin5Ma,插入到5分钟图表中,实现将日线图的均线指标从数据库中读出来。,MyDayMa 代码,Params Numeric Length(10);VarsNumeric MA;string strKey
18、;string strValue;BeginMA = AverageFC(Close,Length);strKey = DateToString(Date);strValue = Text(MA);SetTBProfileString(Symbol+_DayMA,strKey,strValue);PlotNumeric(MA,MA);End,MyMin5Ma 代码,VarsNumericSeries DayMA;string strKey;string strValue;BeginstrKey = DateToString(Date);strValue = GetTBProfileString
19、(Symbol+_DayMA,strKey);If (strValue != InvalidString)DayMA = Value(strValue);ElseDayMA = DayMA1;PlotNumeric(DayMA,DayMA);End,优点和缺点,通过读写数据库的方式实现跨周期调用,优点是不需要复杂的算法,实现起来简单灵活,可以多品种、多周期调用;缺点是需要同时打开多个窗口,而且跨周期的参数不好优化;值得注意的是,这种方法同样存在前面讨论过的大周期和小周期数据对应的问题,在这个例子中,实际上是使用了未来数据;为避免使用未来数据,只能使用前一天的数据代替。,修改后的MyMin5Ma
20、代码,VarsNumericSeries DayMA;StringSeries strKey;string strValue;BeginIf (Date != Date1)strKey = DateToString(date1); ElsestrKey = strKey1;strValue = GetTBProfileString(Symbol+_DayMA,strKey);If (strValue != InvalidString)DayMA = Value(strValue);ElseDayMA = DayMA1;PlotNumeric(DayMA,DayMA);End,30,谢谢大家!,公司网站:新浪微博: 0755-83410021上海办事处:021-68366255我的手机:13501683243,