- 注册时间
- 2013-9-23
- 在线时间
- 519 小时
- 最后登录
- 2022-4-4
- 阅读权限
- 200
管理员
MT4软件工程师
- 积分
- 6521
- 帖子
- 2771
- 主题
- 2761
|
TB编程教程 参数的默认值
在声明参数时,通常会赋给参数一个默认值。例如上例中的False,10,0等就是参数的默认值。用户函数的默认值是在当用户函数被其他公式调用,省略参数时作为参数的输入值,其他五种公式的默认值是用于图表,报价等模块调用公式时默认的输入值。
参数的默认值的类型在定义的时候指定,默认值在公式调用的时候传入作为参数进行计算。只能够对排列在后面的那些参数提供默认参数,例如:
- Params
- Numeric MyVal1;
- Numeric MyVal2(0);
- Numeric MyVal3(0);
复制代码 您不能够使用以下方式对参数的默认值进行设定:
- Params
- Numeric MyVal1(0);
- Numeric MyVal2(0);
- Numeric MyVal3;
复制代码
参数使用在声明参数之后,我们可以在脚本正文中通过参数名称使用该参数,在使用的过程中要注意保持数据类型的匹配,示例如下:
- Params
- NumericSeries Price(1);
- Vars
- NumericSeries CumValue(0);
- Begin
- CumValue = CumValue[1] + Price;
- Return CumValue;
- End
复制代码
在以上的公式中,首先定义了一个数值型序列参数Price,并将其默认值设置为1。接着定义了一个变量CumValue。脚本正文中,将CumValue的上一个Bar值加上Price,并将值赋给CumValue,最后返回CumValue。
通过上述的公式可以看到,我们只需要调用参数名,就可以使用参数的值进行计算了,如果要对序列参数进行回溯,请参见参数回溯。
引用参数TradeBlazer公式的用户函数可以通过返回值,返回函数的计算结果,返回值只能是三种简单类型。当我们需要通过函数进行计算,返回多个值的时候,单个的返回值就不能满足需求了。在这种情况下,我们提出了引用参数的概念,引用参数是在调用的时候传入一个变量的地址,在用户函数内部会修改参数的值,在函数执行完毕,上层调用的公式会通过变量获得修改后的值。因为引用参数的使用是没有个数限制,因此,我们可以通过引用参数返回任意多个值。
例如,用户函数MyFunc如下:
- Params
- NumericSeries Price(0);
- NumericRef oHigher(0);
- NumericRef oLower(0);
- Vars
- Numeric Tmp(0);
- Begin
- Tmp = Average(Price,10);
- oHigher = IIf(Tmp > High,Tmp,High);
- oLower = IIf(Tmp < Low,Tmp,Low);
- Return Tmp;
- End
复制代码 以上代码通过两个数值型引用参数返回10个周期的Price平均值和最高价的较大值oHigher,以及10个周期的Price平均值和最低价的较小值oLower,并且通过函数返回值输出10个周期的Price平均值。在调用该用户函数的公式中,可以通过调用该函数获得3个计算返回值,示例如下:- Vars
- Numeric AvgValue;
- Numeric HigherValue;
- Numeric LowerValue;
- Begin
- AvgValue = MyFunc(Close,HigherValue,LowerValue);
- ...
- End
复制代码
注意: 参数精度只支持2位小数,如需更多精度,可乘上一定倍数来实现。例如:我们要传入的数据为1.234567,实际上TB里只接受2位精度为1.23,如果想要保留小数部分,则我们将它乘上10000后,可以得到12345.67,将12345.67放到参数里,在函数里再除以10000后,即可还原所需要的数据。
|
|