公共函数
来自tradeStar帮助系统
(版本间的差异)
(→概述) |
(→函数返回) |
||
(未显示1个用户的9个中间版本) | |||
第2行: | 第2行: | ||
所谓函数,是一些会反复使用到的功能,封装而成的一段代码。 | 所谓函数,是一些会反复使用到的功能,封装而成的一段代码。 | ||
− | + | 函数有三种类型:内置函数、局部函数和公共函数 | |
− | + | 内置函数是最常用的函数,本软件中有很多内置函数,例如ma、hhv、buy、sell等等。 | |
− | == | + | 当内置函数不够用,除了等待软件升级新增所需函数,还有一个途径,就是通过公式语言自行编写局部函数或公共函数。 |
+ | |||
+ | ==局部函数和公共函数== | ||
通过公式语言编写的函数有两种存在形式。 | 通过公式语言编写的函数有两种存在形式。 | ||
第34行: | 第36行: | ||
if( barpos mod 10 =0 )then | if( barpos mod 10 =0 )then | ||
drawL( close ); | drawL( close ); | ||
+ | |||
+ | 这样的函数我们称为“局部函数”。 | ||
第二种,把函数独立出来,单独成为一个公式 | 第二种,把函数独立出来,单独成为一个公式 | ||
[[文件:funcExample.jpg]] | [[文件:funcExample.jpg]] | ||
− | + | 这样的函数,在公式里不需要额外的声明就可以直接使用,跟ma等内置函数一样,我们称为“公共函数”。 | |
− | + | ||
==适用范围== | ==适用范围== | ||
− | + | 局部函数和公共函数仅工作于逐根模式下。 | |
==函数参数== | ==函数参数== | ||
− | + | 调用函数时,可以通过参数给函数传入和传出值。 | |
+ | 参数类型可以是: | ||
+ | numericSimple 单值 | ||
+ | numericSeries 序列 | ||
+ | numericRef 引用参数 | ||
+ | |||
+ | numericRef类型的参数可以在函数内赋值,并且把值带到主程序中去。 | ||
+ | |||
+ | 当参数类型是numericRef时,传入参数时必须使用序列型(不可以是numericSimple)。 | ||
+ | 例如,以下的例子是不正确的 | ||
+ | func testFunc | ||
+ | input: | ||
+ | numericRef n; | ||
+ | begin | ||
+ | n = 1; | ||
+ | end; | ||
+ | |||
+ | //主程序 | ||
+ | variable: | ||
+ | numericSimple x(0); | ||
+ | testFunc(x); | ||
==函数内部变量== | ==函数内部变量== | ||
− | + | 在函数中定义的变量只是在函数体内使用。 | |
+ | 但是这些变量的值会一直保存,在下根k线到来时,这些变量依然保持上一根k线结算的结果。 | ||
==函数返回== | ==函数返回== | ||
− | == | + | 函数能够返回值给调用者。 |
+ | 语法是: | ||
+ | return x; | ||
+ | |||
+ | 例如: | ||
+ | function func | ||
+ | begin | ||
+ | return 1; | ||
+ | end | ||
+ | |||
+ | |||
+ | 直接给函数名赋值也能达到相同的目的 | ||
+ | 例如: | ||
+ | function func | ||
+ | begin | ||
+ | func = 1; | ||
+ | end | ||
+ | |||
+ | 但是return 和 func=1两种写法会有一个隐蔽的区别。<br> | ||
+ | 如果是func=1,那么函数自己会把每一根K线执行的结果缓存下来,供以后使用。<br> | ||
+ | 例如,可以这样: | ||
+ | function func | ||
+ | begin | ||
+ | if barpos=1 then | ||
+ | func = 1 | ||
+ | else | ||
+ | func = func[1]+1; | ||
+ | end | ||
+ | 而,直接return 的话,func[1]是没有值的 | ||
+ | |||
+ | ==公共函数编译== | ||
+ | 在公共函数被改变后,不但公共函数需要编译,使用了它的公式也需要重新编译。 | ||
+ | |||
+ | 系统会分析使用这个函数的公式的整个依赖链条。 | ||
+ | |||
+ | 有依赖关系的公式会自动列出,供您重新编译。 |
2014年1月2日 (四) 21:58的最后版本
目录 |
[编辑] 概述
所谓函数,是一些会反复使用到的功能,封装而成的一段代码。
函数有三种类型:内置函数、局部函数和公共函数
内置函数是最常用的函数,本软件中有很多内置函数,例如ma、hhv、buy、sell等等。
当内置函数不够用,除了等待软件升级新增所需函数,还有一个途径,就是通过公式语言自行编写局部函数或公共函数。
[编辑] 局部函数和公共函数
通过公式语言编写的函数有两种存在形式。
第一种,内嵌在其他公式中。
例1:内嵌在其他公式中的函数 //以下函数把上次传入的点和这次传入的点用线连起来 function drawL input: numericSimple var1; variable: numericSimple d0(0),t0(0),v0(0); begin if( d0!=0 and date>2013 )then begin id = tl_new( d0, t0, v0, date, time , var1); end; d0 = date; t0 = time; v0 = var1; end //主程序体 //每隔10根k线,就在收盘价处连一条线 #run_by_bar #MainChart #nodefaultoutput if( barpos mod 10 =0 )then drawL( close );
这样的函数我们称为“局部函数”。
第二种,把函数独立出来,单独成为一个公式
这样的函数,在公式里不需要额外的声明就可以直接使用,跟ma等内置函数一样,我们称为“公共函数”。
[编辑] 适用范围
局部函数和公共函数仅工作于逐根模式下。
[编辑] 函数参数
调用函数时,可以通过参数给函数传入和传出值。 参数类型可以是:
numericSimple 单值 numericSeries 序列 numericRef 引用参数
numericRef类型的参数可以在函数内赋值,并且把值带到主程序中去。
当参数类型是numericRef时,传入参数时必须使用序列型(不可以是numericSimple)。
例如,以下的例子是不正确的 func testFunc input: numericRef n; begin n = 1; end; //主程序 variable: numericSimple x(0); testFunc(x);
[编辑] 函数内部变量
在函数中定义的变量只是在函数体内使用。 但是这些变量的值会一直保存,在下根k线到来时,这些变量依然保持上一根k线结算的结果。
[编辑] 函数返回
函数能够返回值给调用者。 语法是:
return x;
例如:
function func begin return 1; end
直接给函数名赋值也能达到相同的目的
例如:
function func begin func = 1; end
但是return 和 func=1两种写法会有一个隐蔽的区别。
如果是func=1,那么函数自己会把每一根K线执行的结果缓存下来,供以后使用。
例如,可以这样:
function func begin if barpos=1 then func = 1 else func = func[1]+1; end
而,直接return 的话,func[1]是没有值的
[编辑] 公共函数编译
在公共函数被改变后,不但公共函数需要编译,使用了它的公式也需要重新编译。
系统会分析使用这个函数的公式的整个依赖链条。
有依赖关系的公式会自动列出,供您重新编译。