开拓者期货期权程序化系统交易论坛

标题: 请教,15分钟线上如何引用日线数据? [打印本页]

作者: hnhyjxwy    时间: 2007-11-4 15:00:19     标题: 请教,15分钟线上如何引用日线数据?

各位高手:我在15分钟线上用一下函数引用日线数据,结果不对,应该怎样正确的引用,请指教。
DayL=DataConvert(Low,"day",1,"Low");
作者: hnhyjxwy    时间: 2007-11-4 15:53:38

我搜索“跨周期”后,仔细看了DataConvert函数的用法,及tradeblazer 的建议,参看nDay指标,理解了跨周期函数的算法,我的引用没有错。
但我想在15分钟线上得到,不包括今天前5天的Low的最低值,应该怎样写呢?
如果能得到当前bar在今天是第几根,并且Lowest的参数支持变量或回朔值支持变量,那么不跨周期引用也能办得到,但有得到当前bar是今天第几根的函数吗?
向各位高手请教,谢谢了!
作者: hnhyjxwy    时间: 2007-11-4 17:14:30

想建个用户函数,求当前bar在今天是第几根,结果一编译就退出开拓者,请版主看看是我的用户函数编的有问题,还是程序原因?
Vars
        Numeric Num(1);
Begin
    If (BarStatus=0)
     {
            Num=1;
     }
         Else
         {
                Num=NthCon(BarStatus=0,1)+1;   
         }
        Return Num;
End
作者: hnhyjxwy    时间: 2007-11-4 18:28:22

改成如下,问题解决。
Vars
        Numeric Num(1);
Begin
   
    If (time==0.090000)
     {
            
            Num=1;
                SetGlobalVar(0,1);
     }
         Else
         {
            Num=GetGlobalVar(0);            
                Num=Num+1;  
                SetGlobalVar(0,Num);                 
         }
        Return Num;
End
tradeblazer软件真的很好用。
作者: hnhyjxwy    时间: 2007-11-4 18:48:51

后改为如下,这样就与开盘时间无关了
Vars
        Numeric Num(1);
        NumericSeries RiQi;
Begin
    RiQi=Date;
    If (RiQi<>RiQi[1])
     {
            
            Num=1;
                SetGlobalVar(0,1);
     }
         Else
         {
            Num=GetGlobalVar(0);            
                Num=Num+1;  
                SetGlobalVar(0,Num);                 
         }
        Return Num;
End
作者: nopain    时间: 2007-11-4 19:32:08

不错,不错!看来已经理解了TB的运行机制,特别是全局变量。
3楼的出错问题可能是:
Num=NthCon(BarStatus=0,1)+1;  
这一行的问题,及时要这么用,也应该写成:

Num=NthCon(BarStatus==0,1)+1;
作者: hnhyjxwy    时间: 2007-11-4 20:31:34

谢谢鼓励,确实错在这,并且不能这样用。
作者: nopain    时间: 2007-11-4 21:05:39

原帖由 hnhyjxwy 于 2007-11-4 18:48 发表
后改为如下,这样就与开盘时间无关了
Vars
        Numeric Num(1);
        NumericSeries RiQi;
Begin
    RiQi=Date;
    If (RiQiRiQi[1])
     {
            
            Num=1;
                SetGlobalVar(0,1);
     }
         Else
         {
            Num=GetGlob ...



最好用序列变量来代替全局变量进行使用,因为如果在交易指令里面调用2次这个函数,就会导致0号全局变量被覆盖。造成数据错误。

用序列变量的代码如下:
  1. Vars
  2.         NumericSeires Num(0);
  3. Begin
  4.      If (Date<>Date[1])
  5.      {            
  6.             Num=1;
  7.      } Else
  8.      {
  9.             Num=Num[1] + 1;
  10.      }
  11.      Return Num;
  12. End
复制代码

作者: hnhyjxwy    时间: 2007-11-4 23:31:04

非常感谢!我的交易指令里多次调用了这个用户函数,发生数据错误。查了很久没有找到原因,现在清楚了。
作者: wer234hj    时间: 2010-3-9 17:36:50     标题: 有什么办法将不同周期的指标值数据直接引用过来

如何使用引用数据类型跨周期,
或者有什么办法将不同周期的指标值数据直接引用过来,非算出来,
不用SetTBProfileString和GetTBProfileString

[ 本帖最后由 wer234hj 于 2010-3-9 17:39 编辑 ]




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2