开发公式的朋友可能经常会遇到这样一个问题:有个很好的策略想法,但编写的过程发现缺少某些函数,自己的策略思路表达不出来,向软件开发商提出需求却又难以得到回应。
易得公式系统的自定义函数就是为了解决此类问题应运而生,用户可以将自己的想法写成一个函数,在公式中可以自由调用,也可以导出共享给其他人。
自定义函数的推出,使得易得公式系统的可编程能力有了质的飞越,意味着易得公式系统向高级编程语言看齐迈出了实质性的一步。
1. 什么是函数
计算机语言中的函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的数据,也可以不接收。接收用户数据的函数在定义时要指明参数,不接收用户数据的不需要指明,根据这一点可以将函数分为有参函数和无参函数。
函数可以有个返回值,将计算结果返回给调用者。
2. 自定义函数的类型
易得公式系统的自定义函数有两种类型:全局自定义函数和局部自定义函数。两者的语法都是一样的,区别在于定义的位置和使用的作用域不同。
1) 全局自定义函数
在易得公式系统的“自定义函数”分类下,其跟技术指标、五彩K线、交易系统、条件选股等分类是平级的。在这个分类下创建的的自定义函数,可以供任何外部公式调用,但其自身不具备有执行能力,它只是个被调用者的角色。
在开发公式时,编写好的全局自定义函数,还可以在插入函数对话框的自定义函数分类中找出。
2) 局部自定义函数
局部自定义函数的不同之处是它的定义可以出现在任何公式的里面,在本公式出现的自定义函数,只可以在本公式内调用,不能被其他公式调用。当然,局部自定义函数的定义必须出现被调用的前面。
如下例,在技术指标公式中,定义一个MyFunc局部自定义函数,并在本公式内调用输出Mul的结果值。
- function MyFunc(x,n)
- begin
- a:=x*n;
- return a;
- End
- Mul:MyFunc(c,5);
复制代码
3. 自定义函数的语法
关键字:function 用来声明定义一个自定义函数 - function AAAA(X, N) // 定义名为AAA的自定义函数,参数X、N。
- function BBB // 定义名为BB的自定义函数,无参数。
复制代码
关键字:return 自定义函数返回,只能用在自定义函数体中。 语法: - return var; // 自定义函数立即返回,带返回值var。后面语句不会执行。
- return; // 自定义函数立即返回,不带返回值。后面语句不会执行。
复制代码
1) 有参数自定义函数 - function AAAA(X, N) // 定义名为AAA的自定义函数,参数X、N。
- begin // 自定义函数必须以BEGIN开始
- res := X * N;
- return res; // 自定义函数返回,带返回值res.
- end // 自定义函数必须以END结尾
- A:AAA(c, 5); // 自定义函数的调用
复制代码
2) 无参数自定义函数 - function BBB // 定义名为BB的自定义函数,没有参数。
- begin // 自定义函数必须以BEGIN开始
- res := c * 5;
- return res; // 自定义函数返回,带返回值res.
- end // 自定义函数必须以END结尾
- B:BBB; // 自定义函数的调用
复制代码
4. 自定义函数的使用规则
1) 函数体内不能显式输出指标线数据. 2) 函数体内不能使用外部变量,如果需要使用必须以函数参数的方式传入。但函数体内可以使用公式参数和VARIABLE变量。 3) 函数的参数以及函数体内的变量,都可以跟外部变量同名.
5. 自定义函数的实例
例子1:求平均线,等价于系统提供的函数MA - function myma(x, n)
- begin
- n:=intpart(n); // 均线天数取整,防止传入浮点数
- if currcalcbar >= n then
- begin
- sums:=0;
- for i=currcalcbar downto currcalcbar-n+1 do
- sums := sums+x[i];
- sums:=sums/n;
- return sums;
- end
- end
-
- a:myma(c,5); // 调用自定义函数myma。结果与 b:ma(c,5); 一样
复制代码
例子2:条件跟随函数,等价于系统提供的函数VALUEWHEN - function myvaluewhen(condi, x)
- begin
- result:=invaliddata;
-
- if condi > 0 then
- result:=x;
- else if currcalcbar > 1 then
- result:=result[currcalcbar-1];
-
- return result;
- end
- a:myvaluewhen(c>o,1); // 调用myvaluewhen。结果与 b:valuewhen(c>o,1);一样
复制代码
通过上面的2个实例,可以看到通过易得公式系统可以很容易的编写自己想要的函数。其实,系统自带的统计类函数,几乎都可以通过自定义函数自己来实现。
值得一提的是,易得是市面上唯一能通过公式系统编写自定义函数的软件。
|