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

内建函数NthExtremes拷贝到自定义函数中后再编译有警示 [开拓者 TB]

  • 咨询内容: 本帖最后由 china_lizhi 于 2016-3-9 13:05 编辑

    把内建函数NthExtremes中的源代码原封不动地拷贝到了自定义函数中了,然后编译对如下两行代码有如下的警示:
                    NthMaxValue = Extremes(Price, Length, True, nMaxBar);
                    NthMinValue = Extremes(Price, Length, False, nMinBar);
    这两行提示:FOR、WHILE、IF、ELSE中包含序列函数,可能存在潜在的逻辑错误。

     

  • TB技术人员: 恳请提供函数NthExtremes中的代码的详细注解,以帮助TB初学者入门。谢谢

    恳请客服对于以下代码给予详细的注释,以便于初学者入门

     

  • TB客服: 本帖最后由 china_lizhi 于 2016-3-9 13:06 编辑

    //------------------------------------------------------------------------
    // 简称: 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[j] > NthMaxValue)
                                            {
                                                    nBetterCnt = nBetterCnt + 1;
                                            }else If ( Price[j] < NthMaxValue)
                                            {
                                                    if (Price[j] > TmpValue)
                                                    {
                                                            TmpValue = Price[j] ;
                                                            nMaxBar = j;
                                                    }
                                            }Else
                                            {
                                                    nEqualCnt = nEqualCnt + 1;
                                            }
                                    }
                                           
                                    if (nBetterCnt + nEqualCnt >= i)
                                    {
                                            nEqualIndex = 0;
                                            for  k = 0 To  Length - 1
                                            {
                                                    if (Price[k] == 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[j] < NthMinValue)
                                            {
                                                    nBetterCnt = nBetterCnt + 1;
                                            }else If ( Price[j] > NthMinValue)
                                            {
                                                    if (Price[j] < TmpValue)
                                                    {
                                                            TmpValue = Price[j] ;
                                                            nMinBar = j;
                                                    }
                                            }Else
                                            {
                                                    nEqualCnt = nEqualCnt + 1;
                                            }
                                    }
                                           
                                    if (nBetterCnt + nEqualCnt >= i)
                                    {
                                            nEqualIndex = 0;
                                            for  k = 0 To  Length - 1
                                            {
                                                    if (Price[k] == 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公式修改和重写的权利
    //------------------------------------------------------------------------

 

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

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


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

相关文章

    没有相关内容