- 精华
- 0
- 在线时间
- 18 小时
- UID
- 189910
- 积分
- 6
- 帖子
- 4
- 阅读权限
- 10
- 注册时间
- 2014-7-4
- 最后登录
- 2017-4-25
- 精华
- 0
- UID
- 189910
- 积分
- 6
- 帖子
- 4
- 主题
- 2
- 阅读权限
- 10
- 注册时间
- 2014-7-4
- 最后登录
- 2017-4-25
|
这几天写了一个求取昨日同一时刻持仓量与当前时刻持仓量之比的公式应用,名叫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公式修改和重写的权利
//------------------------------------------------------------------------
|
|