把这个函数拷贝出来编译警示可能有问题——NthExtremes
//------------------------------------------------------------------------// 简称: NthExtremes
// 名称: 求N极值
// 类别: 用户函数
// 类型: 内建函数
// 输出: 数值型
//------------------------------------------------------------------------
Params
NumericSeries Price(1);
Numeric Length(10);
Numeric N(5);
Bool bMax(True);
NumericRef NthExtremeBar;
Vars
Numeric nMaxBar;
Numeric NthMaxValue;
Numeric nMinBar;
Numeric NthMinValue;
Numeric TmpValue;
Numeric NthReturnValue;
Numeric nBetterCnt;
Numeric nEqualCnt;
Numeric nEqualIndex;
Numeric i;
Numeric j;
Numeric k;
Begin
if (Length > 0 && N>0 && N <= Length)
{
NthMaxValue = Extremes(Price, Length, True, nMaxBar);
NthMinValue = Extremes(Price, Length, False, nMinBar);
If(bMax)
{
For i = 2 To N
{
TmpValue = NthMinValue - 1;
nBetterCnt = 0;
nEqualCnt = 0;
For j = 0 To Length - 1
{
If ( Price > NthMaxValue)
{
nBetterCnt = nBetterCnt + 1;
}else If ( Price < NthMaxValue)
{
if (Price > TmpValue)
{
TmpValue = Price ;
nMaxBar = j;
}
}Else
{
nEqualCnt = nEqualCnt + 1;
}
}
if (nBetterCnt + nEqualCnt >= i)
{
nEqualIndex = 0;
for k = 0 To Length - 1
{
if (Price == NthMaxValue)
{
nEqualIndex = nEqualIndex + 1;
if (nEqualIndex == (i - nBetterCnt))
{
nMaxBar = k;
}
}
}
}else
{
NthMaxValue = TmpValue;
}
}
NthExtremeBar = nMaxBar;
NthReturnValue = NthMaxValue;
}Else
{
For i = 2 To N
{
TmpValue = NthMaxValue + 1;
nBetterCnt = 0;
nEqualCnt = 0;
For j = 0 To Length - 1
{
If ( Price < NthMinValue)
{
nBetterCnt = nBetterCnt + 1;
}else If ( Price > NthMinValue)
{
if (Price < TmpValue)
{
TmpValue = Price ;
nMinBar = j;
}
}Else
{
nEqualCnt = nEqualCnt + 1;
}
}
if (nBetterCnt + nEqualCnt >= i)
{
nEqualIndex = 0;
for k = 0 To Length - 1
{
if (Price == NthMinValue)
{
nEqualIndex = nEqualIndex + 1;
if (nEqualIndex == (i - nBetterCnt))
{
nMinBar = k;
}
}
}
}else
{
NthMinValue = TmpValue;
}
}
NthExtremeBar = nMinBar;
NthReturnValue = NthMinValue;
}
}Else
{
NthReturnValue = -1;
NthExtremeBar = -1;
}
Return NthReturnValue;
End
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 版权所有 TradeBlazer Software 2003-2010
// 更改声明 TradeBlazer Software保留对TradeBlazer平
// 台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------ 调整成如下顺序编译就没问题了
Begin
NthMaxValue = Extremes(Price, Length, True, nMaxBar);
NthMinValue = Extremes(Price, Length, False, nMinBar);
if (Length > 0 && N>0 && N <= Length)
{ 把内建函数NthExtremes中的源代码原封不动地拷贝到了自定义函数中了,然后编译对如下两行代码有如下的警示:
NthMaxValue = Extremes(Price, Length, True, nMaxBar);
NthMinValue = Extremes(Price, Length, False, nMinBar);
这两行提示:FOR、WHILE、IF、ELSE中包含序列函数,可能存在潜在的逻辑错误。 china_lizhi 发表于 2016-3-10 15:25 static/image/common/back.gif
把内建函数NthExtremes中的源代码原封不动地拷贝到了自定义函数中了,然后编译对如下两行代码有如下的警示 ...
已经 通过编译的,可以忽略此提示。。
但凡在条件里使用了序列函数的都会有此提示,如果在公式应用中,尽可能避免如此使用。在函数中,特别是系统自带的函数是可以确定其运算结果无误的,就可以不用理会了。
页:
[1]