路路发智能交易研发中心

 找回密码
 立即注册
查看: 1706|回复: 0

TB编程教程 参数的默认值

[复制链接]

管理员

MT4软件工程师

Rank: 9Rank: 9Rank: 9

积分
6521
帖子
2771
主题
2761
QQ
发表于 2015-5-9 17:45:33 | 显示全部楼层 |阅读模式
TB编程教程 参数的默认值
在声明参数时,通常会赋给参数一个默认值。例如上例中的False,10,0等就是参数的默认值。用户函数的默认值是在当用户函数被其他公式调用,省略参数时作为参数的输入值,其他五种公式的默认值是用于图表,报价等模块调用公式时默认的输入值。
参数的默认值的类型在定义的时候指定,默认值在公式调用的时候传入作为参数进行计算。只能够对排列在后面的那些参数提供默认参数,例如:
  1. Params
  2.     Numeric        MyVal1;
  3.     Numeric        MyVal2(0);
  4.     Numeric        MyVal3(0);
复制代码
您不能够使用以下方式对参数的默认值进行设定:
  1. Params
  2.     Numeric        MyVal1(0);
  3.     Numeric        MyVal2(0);
  4.     Numeric        MyVal3;
复制代码

参数使用在声明参数之后,我们可以在脚本正文中通过参数名称使用该参数,在使用的过程中要注意保持数据类型的匹配,示例如下:
  1. Params
  2.     NumericSeries Price(1);
  3. Vars
  4.     NumericSeries CumValue(0);
  5. Begin
  6.     CumValue = CumValue[1] + Price;       
  7.     Return CumValue;
  8. End
复制代码


在以上的公式中,首先定义了一个数值型序列参数Price,并将其默认值设置为1。接着定义了一个变量CumValue。脚本正文中,将CumValue的上一个Bar值加上Price,并将值赋给CumValue,最后返回CumValue。
通过上述的公式可以看到,我们只需要调用参数名,就可以使用参数的值进行计算了,如果要对序列参数进行回溯,请参见参数回溯。
引用参数TradeBlazer公式的用户函数可以通过返回值,返回函数的计算结果,返回值只能是三种简单类型。当我们需要通过函数进行计算,返回多个值的时候,单个的返回值就不能满足需求了。在这种情况下,我们提出了引用参数的概念,引用参数是在调用的时候传入一个变量的地址,在用户函数内部会修改参数的值,在函数执行完毕,上层调用的公式会通过变量获得修改后的值。因为引用参数的使用是没有个数限制,因此,我们可以通过引用参数返回任意多个值。
例如,用户函数MyFunc如下:
  1. Params
  2.     NumericSeries   Price(0);
  3.     NumericRef      oHigher(0);
  4.     NumericRef      oLower(0);
  5. Vars
  6.     Numeric         Tmp(0);
  7. Begin
  8.     Tmp = Average(Price,10);
  9.     oHigher = IIf(Tmp > High,Tmp,High);
  10.     oLower = IIf(Tmp < Low,Tmp,Low);
  11.     Return Tmp;
  12. End

复制代码
以上代码通过两个数值型引用参数返回10个周期的Price平均值和最高价的较大值oHigher,以及10个周期的Price平均值和最低价的较小值oLower,并且通过函数返回值输出10个周期的Price平均值。在调用该用户函数的公式中,可以通过调用该函数获得3个计算返回值,示例如下:
  1. Vars
  2.     Numeric AvgValue;
  3.     Numeric        HigherValue;
  4.     Numeric LowerValue;
  5. Begin
  6.     AvgValue = MyFunc(Close,HigherValue,LowerValue);
  7.     ...
  8. End
复制代码


注意: 参数精度只支持2位小数,如需更多精度,可乘上一定倍数来实现。例如:我们要传入的数据为1.234567,实际上TB里只接受2位精度为1.23,如果想要保留小数部分,则我们将它乘上10000后,可以得到12345.67,将12345.67放到参数里,在函数里再除以10000后,即可还原所需要的数据。




外汇智能交易,成就财富梦想!
回复

使用道具 举报

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

本版积分规则


MT4编程培训|EA定制开发|QQ在线咨询|路路发智能交易研发中心

GMT+8, 2025-1-7 05:32 , Processed in 0.143259 second(s), 25 queries .

© 2009-2022 520EA.com EA668.com

快速回复 返回顶部 返回列表