- 注册时间
- 2013-9-23
- 在线时间
- 519 小时
- 最后登录
- 2022-4-4
- 阅读权限
- 200
管理员
MT4软件工程师
- 积分
- 6521
- 帖子
- 2771
- 主题
- 2761
|
TB编程教程 用户函数的调用
用户函数成功创建之后(编译/保存成功),您可以在其他的用户函数、公式应用中调用用户函数,调用用户函数时需要注意保持参数类型的匹配,即用户函数参数的声明数据类型需和调用时传入参数的数据匹配,这是所指的匹配是指基本数据类型:数值型,布尔型,字符串三种类型匹配,并且保持序列参数和传入变量类型的对应。我们可以对用户函数定义为Numeric或者NumericRef的参数使用Numeric类型的变量作为传入参数;但不能将在定义为NumericRef类型的参数时传入NumericSeries。具体的对应关系如下表:
函数参数声明类型 | 可传入的变量类型 | Numeric | Numeric,NumericRef,NumericSeries | NumericRef | Numeric,NumericRef | NumericSeries | Numeric,NumericRef,NumericSeries | Bool | Bool,BoolRef,BoolSeries | BoolRef | Bool,BoolRef | BoolSeries | Bool,BoolRef,BoolSeries | String | String,StringRef,StringSeries | StringRef | String,StringRef | StringSeries | String,StringRef,StringSeries | 对于函数的返回值,您也可以将用户函数的Numeric返回值赋值给NumericSeries或NumericRef变量。即在用户函数的返回值使用时,忽略其扩展数据类型。比如我们在调用Average求平均值时,可以这样调用:
- Vars
- Numeric Value1;
- Begin
- Value1 = Average(Close,10);
- ...
- End
复制代码
- <p>我们也可以按照以下方式进行调用:</p><pre class="tbl3">Vars
- NumericSeries Value1;
- Begin
- Value1 = Average(CloseTmp,10);
- ...
- End</pre>
复制代码
A用户函数调用自身,我们称之为直接递归;A用户函数可以调用B用户函数,同时B用户函数也可以调用A用户函数,对于这种的情况,我们称之为间接递归;
不管是直接递归还是间接递归,用户函数在执行的时候,都可能遇到递归调用没有出口,导致死循环的情况。因此,我们在编写公式的时候,要注意避免使用递归算法,如果一定需要使用递归算法,要注意保证递归算法都有出口。
|
|