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

Extremes 解读求极值函数,测试能否玩TB [开拓者 TB]

  • 咨询内容: 有朋友问如何学好TB?我说要读懂公式指南,然后靠联机帮助,然后看编程能力和逻辑思维的天赋,然后...
    我给个系统函数,让她读,懂了,再问说不出所以然来。
    后来我一一作了注释,总算读懂了,呵呵

    试试看,如果能完全读懂,就可以学TB了。
    读懂的,请回复...
    1. //------------------------------------------------------------------------
    2. // 简称: Extremes
    3. // 名称: 求极值
    4. // 类别: 用户函数
    5. // 类型: 内建函数
    6. // 输出: 数值型      (返回极值和引用型极值位置)
    7. //------------------------------------------------------------------------

    8. Params
    9.         NumericSeries Price(1); //序列传递参数,如Close;如果不指定参数,那Price的初始值均为1(实在没有意义)
    10.         Numeric Length(10);        //指定搜索的范围(即搜索多少个Bar,缺省10个)
    11.         Bool bMax(True);        //指定搜索极大值(缺省True)或极小值(False)
    12.         NumericRef ExtremeBar; //数值型引用变量,用于返回搜索范围内的极值Bar位置;而极值以函数返回(见Return MyVal;)
    13. Vars
    14.         NumericSeries MyVal; //保存极值的序列
    15.         NumericSeries MyBar; //保存极值所在Bar的序列
    16.         Numeric i; //搜索变量
    17. Begin
    18.         MyVal = Price; //每个新Bar的价格均要赋值给极值序列,但在计算后该值将被更新为新的极值
    19.         MyBar = 0; //假定新Bar是极值,但在计算后该值将被更新为新的极值Bar
    20.        
    21.         // 在头(Length-1)Bar内要全部搜索一边;或者极值在搜索边界上(==Length-1),下一个Bar后极值被挤出搜索范围,这时要重新搜索出新的极值;
    22.         If ( CurrentBar <= Length - 1 || MyBar[1] == Length - 1)
    23.         {
    24.                 for i = 1 to Length - 1 //搜索一边指定范围,如10,则要向后搜Bar1到Bar9;i=1是因为Bar0(myVal)没有必要与自己比较
    25.                 {
    26.                         If (bMax ) //找新的最大值
    27.                         {
    28.                                 If ( Price[i] > MyVal) //找到比当前最大值更大的价格
    29.                                 {
    30.                                         MyVal = Price[i]; //更新最大值
    31.                                         MyBar = i;        //同时更新最大值的位置
    32.                                 }
    33.                         }Else //找最小值的情况类似
    34.                         {
    35.                                 If ( Price[i] < MyVal)
    36.                                 {
    37.                                         MyVal = Price[i];
    38.                                         MyBar = i;
    39.                                 }
    40.                         }
    41.                 }       
    42.         }
    43.         Else // 当前Bar头(Length-1)之后,并且极值在搜索边界内(< Length-1),则仅进行当前价与极值进行比较
    44.         {
    45.                 If ( bMax ) //搜索最大值
    46.                 {
    47.                         If ( Price >= MyVal[1]) //当前价不小于原最大价,找到新的最大价;注意用了>=而不是==
    48.                         {
    49.                                 MyVal = Price;  //当前价是新的最大值
    50.                                 MyBar = 0;                //CurrentBar为0
    51.                         }Else
    52.                         {
    53.                                 MyVal = MyVal[1];                //最新价小于原最大值,因此保持原最大值
    54.                                 MyBar = MyBar[1] + 1;        //最大值的位置远离了1位
    55.                         }
    56.                 }Else //最小值情况类似
    57.                 {
    58.                         If ( Price <= MyVal[1])
    59.                         {
    60.                                 MyVal = Price;
    61.                                 MyBar = 0;
    62.                         }Else
    63.                         {
    64.                                 MyVal = MyVal[1];
    65.                                 MyBar = MyBar[1] + 1;
    66.                         }
    67.                 }
    68.         }       
    69.         ExtremeBar = MyBar; //将极值传递给数值型引用变量,用于返回极值的位置
    70.         Return MyVal; //函数返回要求搜索的极值
    71. End

    72. //------------------------------------------------------------------------
    73. // 编译版本        GS2010.12.08
    74. // 用户版本        2012/05/11 21:47
    75. // 版权所有        guqf
    76. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
    77. //                        每一版本的TrabeBlazer公式修改和重写的权利
    78. //------------------------------------------------------------------------

     

  • TB技术人员: 求注解函数NthCon,谢谢!

     

  • TB客服: 同求注解函数NthCon,谢谢!

     

  • 网友回复: 老革命遇到新问题
    MaxValDn= Extremes(Close,nLength,true, MaxBarDn); Commentary("MaxBarDn "+Text(MaxBarDn));
    MinValDn= Extremes(Close,MaxBarDn,False,MinBarDn); Commentary("MinBarDn "+Text(MinBarDn));
    nLength是30,第一句是求30个Bar内的最高价和对应的位置MaxBarDn,显示结果是14,检查K线图形正确。
    但问题出现在第二句,原意是求出现最高价位之内的最低价位置,结果MinBarDn超出了14,不可思议!
    但是将第二句改成:MinValDn= Extremes(Close,14,False,MinBarDn); Commentary("MinBarDn "+Text(MinBarDn));
    计算出的MinBarDn为0,正确!是在最低位。
    为什么用MaxBarDn作为检索变量就会出错,请管理员帮助检查原因,谢谢!

 

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

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


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

相关文章

    没有相关内容