设为首页收藏本站

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

内建函数NthExtremes拷贝到自定义函数中后再编译有警示 [复制链接]

Rank: 6Rank: 6

精华
0
UID
208212
积分
2006
帖子
103
主题
24
阅读权限
70
注册时间
2015-5-2
最后登录
2019-6-18
跳转到指定楼层
1#
发表于 2016-3-9 12:51:53 |只看该作者 |倒序浏览
本帖最后由 china_lizhi 于 2016-3-9 13:05 编辑

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

Rank: 6Rank: 6

精华
0
UID
208212
积分
2006
帖子
103
主题
24
阅读权限
70
注册时间
2015-5-2
最后登录
2019-6-18
2#
发表于 2016-3-9 12:58:11 |只看该作者
恳请提供函数NthExtremes中的代码的详细注解,以帮助TB初学者入门。谢谢

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
208212
积分
2006
帖子
103
主题
24
阅读权限
70
注册时间
2015-5-2
最后登录
2019-6-18
3#
发表于 2016-3-9 13:05:50 |只看该作者

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

本帖最后由 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公式修改和重写的权利
//------------------------------------------------------------------------

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

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

GMT+8, 2024-5-14 00:05

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部