设为首页收藏本站

 找回密码
 注册
查看: 1735|回复: 0
打印 上一主题 下一主题

txt中值的输出正常,但子图中值的显示全部变为N/A? [复制链接]

Rank: 1

精华
0
UID
189910
积分
6
帖子
4
主题
2
阅读权限
10
注册时间
2014-7-4
最后登录
2017-4-25
跳转到指定楼层
1#
发表于 2016-3-29 16:39:58 |只看该作者 |倒序浏览
这几天写了一个求取昨日同一时刻持仓量与当前时刻持仓量之比的公式应用,名叫OIRatio。
奇怪的是,最开始调试的时候子图显示一切正常,但突然某一刻开始,子图中所有值的显示都变成了N/A值。
但代码中对应变量输出到txt中的值仍然是正常的。
随后重启TB多次,调用该公式应用子图显示全部为N/A,没有再正常回来。但如果调用其他公示应用显示就没问题。
有没有小伙伴可以给我找一下原因....万分感谢....代码如下:

//------------------------------------------------------------------------
// 简称: OIRatio2
// 名称: OIRatio2
// 类别: 公式应用
// 类型: 用户应用
// 输出:
//------------------------------------------------------------------------
Params
        Numeric multiple(100);
vars
        Numeric n;
        Numeric fd;        
        Numeric ft;
        Numeric first;
        Numeric OIRatio;
       
begin

        FileAppend("d:\\tb\\timeTest2.log","主函数当前时间 = "+Text(Date)+" "+Text(Time)+"-----------------------------------------------");           
        //FileAppend("d:\\tb\\timeTest2.log","市场类型 = "+ ExchangeName);  
        //FileAppend("d:\\tb\\timeTest2.log","品种类型 = "+ SymbolType);

        if(BarStatus==0)
        {
                SetGlobalVar2("firstDate",Date+Time);
                SetGlobalVar2(Symbol,InvalidNumeric);  
                //FileAppend("d:\\tb\\timeTest2.log","第一根bar中fd = "+ Text(Date));
                //FileAppend("d:\\tb\\timeTest2.log","第一根bar中ft = "+ Text(Time));
                //FileAppend("d:\\tb\\timeTest2.log","第一根bar中sd = "+ Text(DateAdd(Date,1)));  
        }

        //内存
        n = GetGlobalVar2(Symbol);
        FileAppend("d:\\tb\\timeTest2.log","test1 = "+ Text(n));
         
        //假如n值没有计算过
        If(n==InvalidNumeric)
        {
                n = getPreDayTimeIndex2;  
                SetGlobalVar2(Symbol,n);
        }
       
        //FileAppend("d:\\tb\\timeTest2.log","内存提取出的n = "+ Text(n));
        //FileAppend("d:\\tb\\timeTest2.log","time[n] = "+ Text(Time[n]));
        //FileAppend("d:\\tb\\timeTest2.log","当前time = "+ Text(Time));
        FileAppend("d:\\tb\\timeTest2.log","当前barcount = "+ Text(CurrentBar));
       
        //假如n有值
        If(Time!=Time[n])
        {
                first = GetGlobalVar2("firstDate");
                fd = Floor(first,1);
                ft = first - fd;
                //FileAppend("d:\\tb\\timeTest2.log","fd = "+ Text(fd));
                //FileAppend("d:\\tb\\timeTest2.log","ft = "+ Text(ft));
                //FileAppend("d:\\tb\\timeTest2.log","Time[n] = "+ Text(Time[n]));
                //FileAppend("d:\\tb\\timeTest2.log","Date[n] = "+ Text(Date[n]));
               
                If(Time[n]==ft And Date[n]==fd) //Time[n]==ft And Date[n]==fd
                {
                        n = InvalidNumeric;
                        //FileAppend("d:\\tb\\timeTest2.log","提示:初始部分n无有效值 ");  
                }else
                {
                        FileAppend("d:\\tb\\timeTest2.log","准备进入函数,当前Date[n] = "+Text(Date[n]));
                        n = getPreDayTimeIndex4(n,fd,ft);
                        FileAppend("d:\\tb\\timeTest2.log","重新计算出n = "+Text(n));  
                        SetGlobalVar2(Symbol,n);
                }
               
        }else If(BarStatus==0)
        {
                        n = InvalidNumeric;
                        //FileAppend("d:\\tb\\timeTest2.log","提示:第一根bar上n无有效值 ");  
        }
       
        FileAppend("d:\\tb\\timeTest2.log","getPreDayTimeIndex计算出: "+Text(Date[n])+" "+Text(Time[n]));
       
        // 根据n的最终取值计算OIRation
    If(n==InvalidNumeric)
        {
                //FileAppend("d:\\tb\\timeTest2.log","提示:找不到前一天相同时间的数据");
                OIRatio = InvalidNumeric;
        }Else
        {
                OIRatio = OpenInt/OpenInt[n];
        }

        //PlotNumeric("OIRatioAdj",OIRatio*multiple);
        //PlotNumeric("multiple",multiple);
        PlotNumeric("OIRatio",OIRatio);
       
        FileAppend("d:\\tb\\timeTest2.log","OIRatio = "+ Text(OIRatio));   
        //FileAppend("d:\\tb\\timeTest2.log","multiple = "+ Text(multiple));
        //FileAppend("d:\\tb\\timeTest2.log","plot = "+ Text(OIRatio*multiple));
        //FileAppend("d:\\tb\\timeTest2.log","系统当前时间 = "+Text(CurrentTime));

end
//------------------------------------------------------------------------
// 编译版本        GS2010.12.08
// 用户版本        2016-03-18 16:16:25
// 版权所有        yesutar
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

//------------------------------------------------------------------------
// 简称: getPreDayTimeIndex2
// 名称: getPreDayTimeIndex2
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
        //String ExchangeName;
        //String SymbolType;
        //Numeric BarInterval;
        //Numeric BarType;
Vars
        Numeric i(1);

Begin
       
        If(Exact(ExchangeName,"中国金融期货交易所"))
        {
                //FileAppend("d:\\tb\\timeTest2.log","市场类型 = "+ ExchangeName);
                //上午:9:30-11:30(2小时),下午:13:00-15:00(2小时)
                If(BarType==1) //分钟线
                {
                        i = 4*60/BarInterval;
                }else If(BarType==2) //TICK线
                        {       
                                i = 4*60*60/BarInterval;
                        }
        }Else
        {
                //FileAppend("d:\\tb\\timeTest2.log","市场类型 = "+ ExchangeName);
                //上午9:00-11:30(2.5小时),下午13:30-15:00(1.5小时)
                //上午10:15-10:30休息(0.25小时)
                If(BarType==1) //分钟线
                {
                        i = ((4-0.25)*60)/BarInterval;
                }else If(BarType==2) //TICK线
                        {       
                                i = (4-0.25)*60*60/BarInterval;
                        }
        }
       
        Return i;
       
End

//------------------------------------------------------------------------
// 编译版本        GS2010.12.08
// 用户版本        2016-03-18 15:48:07
// 版权所有        yesutar
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

//------------------------------------------------------------------------
// 简称: getPreDayTimeIndex4
// 名称: getPreDayTimeIndex4
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
        Numeric n;
        Numeric fd;
        Numeric ft;
Vars
        Numeric i(0);
        Numeric on(0);
       
Begin

        FileAppend("d:\\tb\\timeTest2.log","getPreDayTimeIndex3中 fd = "+ Text(fd)+" ft = "+Text(ft)+" n = "+Text(n));
       
        i = n;

        While (Time[i]!= Time)
        {
                i = i-1;
                //FileAppend("d:\\tb\\timeTest2.log","getPreDayTimeIndex3当前i为"+Text(i));
                //FileAppend("d:\\tb\\timeTest2.log","getPreDayTimeIndex3当前Time为"+Text(Time[i]));
                //FileAppend("d:\\tb\\timeTest2.log","getPreDayTimeIndex3当前Date为"+Text(Date[i]));
                if(i<=(n*0.6)) // 估算值3/5
                {
                        FileAppend("d:\\tb\\timeTest2.log","getPreDayTimeIndex3往回找找不到: "+Text(Date)+" "+Text(Time)+" 当前i为"+Text(i));
                        on = 1;
                        break;
                }
        }
       
        If(on==1)
        {
                i = n;
                While (Time[i]!= Time)
                {
                        i = i+1;
                        If((Time[i]==ft And Date[i]==fd) Or i>=(2.5*n)) // 估算值2.5
                        {
                                FileAppend("d:\\tb\\timeTest2.log","getPreDayTimeIndex3仍处于初始范围: "+Text(Date)+" "+Text(Time)+" 当前i为"+Text(i));
                                i = InvalidNumeric;
                                //FileAppend("d:\\tb\\timeTest2.log","getPreDayTimeIndex3仍处于初始范围: "+Text(Date)+" "+Text(Time)+" 当前i为"+Text(i));
                                Break;
                        }
                }
        }
       
        FileAppend("d:\\tb\\timeTest2.log","getPreDayTimeIndex3计算出: "+Text(Date[i])+" "+Text(Time[i]));
       
        Return i;
End


//------------------------------------------------------------------------
// 编译版本        GS2010.12.08
// 用户版本        2016-03-25 08:40:33
// 版权所有        yesutar
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-13 20:16

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部