您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

想问一下关于全局变量的问题,谁能给解答一下 [开拓者 TB]

  • 咨询内容: 我想问一下关于全局变量的问题。关于这个程序,1,全局变量必须初始化吗?2这个程序是从全局变量初始化的语句先执行吗?但是为什么执行出来的结果是else if那句放在最前面?3在语句  if (Date+Time > bartime)中bartime不是赋值是0吗,怎么跟Date+Time比较大小。
    Vars
            NumericSeries TickCnt;
            Numeric bartime;
    Begin
            bartime = GetGlobalVar(0);
            if (bartime == InvalidNumeric)//bar时间初始化
            {
                bartime = 0;
                SetGlobalVar(0,bartime);
                TickCnt = 1;
                SetGlobalVar(1,TickCnt);
                FileAppend("d:\\Sample_13.log","Bartime ="+DateTimeToString(date+time) +"\t计数器初始化, Global(0) = "+text(bartime)+ "\tGlobal(1) = "+Text(TickCnt));
                   
            }
       if (Date+Time > bartime)
       {
               bartime = Date + Time;
               SetGlobalVar(0,bartime);
               TickCnt = 1;
               SetGlobalVar(1,TickCnt);
               FileAppend("d:\\Sample_13.log","Bartime = "+DateTimeToString(date+time)+"\t新K线产生,Global(0) = "+DateTimeToString(bartime)+ "\tGlobal(1) = "+Text(TickCnt));
             
       }
       Else If (Date+Time==bartime)
       {
               TickCnt = GetGlobalVar(1) + 1;
               SetGlobalVar(1,TickCnt);
               FileAppend("d:\\Sample_13.log","Bartime = "+DateTimeToString(date+time)+"\t原K线增加计数,Global(0) = "+DateTimeToString(bartime)+"\t Global(1) = "+Text(TickCnt));
       }
            
       Commentary("TickCnt="+text(TickCnt));
    End.

     

  • TB技术人员: 1.并没有规定全局变量必须要初始化后方可使用。未赋值前,全局变量的初值是无效值。如你所贴的例子里,全局变量就没有初始化的呀。
    2.不是很理解你的问题。代码是按从上向下的顺序开始 执行的,满足条件的,就执行条件内语句,不满足的条件,则不会执行条件内语句啊。在实时行情中的最后K线上,是会满足else if里的内容并执行,但不会是else if放在最前面。
    3.请仔细看代码,只有在bartime==invalidnumeric时,才会给bartime赋值为0,其它条件下均不为0.

     

  • TB客服: 您好,比如说if (Date+Time > bartime)语句,bartime之前并没有赋值,这个时候怎么比较呀?

     

  • 网友回复: Bartime = 2014-08-26 15:14:00        原K线增加计数,Global(0) = 2014-08-26 15:14:00         Global(1) = 2
    Bartime =2014-08-19 11:15:00        计数器初始化, Global(0) = 0        Global(1) = 1
    Bartime = 2014-08-19 11:15:00        新K线产生,Global(0) = 2014-08-19 11:15:00        Global(1) = 1
    Bartime = 2014-08-19 11:20:00        新K线产生,Global(0) = 2014-08-19 11:20:00        Global(1) = 1
    Bartime = 2014-08-19 11:25:00        新K线产生,Global(0) = 2014-08-19 11:25:00        Global(1) = 1
    Bartime = 2014-08-19 13:00:00        新K线产生,Global(0) = 2014-08-19 13:00:00        Global(1) = 1
    Bartime = 2014-08-19 13:05:00        新K线产生,Global(0) = 2014-08-19 13:05:00        Global(1) = 1
    Bartime = 2014-08-19 13:10:00        新K线产生,Global(0) = 2014-08-19 13:10:00        Global(1) = 1
    您看这是 执行出来的程序,为什么把这句放在第一句?Bartime = 2014-08-26 15:14:00        原K线增加计数,Global(0) = 2014-08-26 15:14:00         Global(1) = 2

     

  • 网友回复:
    yekunpeng 发表于 2014-8-27 10:52
    Bartime = 2014-08-26 15:14:00        原K线增加计数,Global(0) = 2014-08-26 15:14:00         Global(1) = 2
    Bartime = ...

    我建议你按如下方法来测试一下好不好?
    1.将原有的d盘下的sample_13的记录文件全部删掉
    2.重新打开一个图表,将样本数设置为10或20;
    3.在图表上插入该公式应用
    4.打开指定路径下的日志文件,看看内容是啥。

    我这里测试得到的结果如下截图
    yyy.png (42.97 KB, 下载次数: 0) 2014-8-27 11:24:54 上传 下载次数: 0

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容