| 
     开发公式的朋友可能经常会遇到这样一个问题:有个很好的策略想法,但编写的过程发现缺少某些函数,自己的策略思路表达不出来,向软件开发商提出需求却又难以得到回应。  
    易得公式系统的自定义函数就是为了解决此类问题应运而生,用户可以将自己的想法写成一个函数,在公式中可以自由调用,也可以导出共享给其他人。  
    自定义函数的推出,使得易得公式系统的可编程能力有了质的飞越,意味着易得公式系统向高级编程语言看齐迈出了实质性的一步。  
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个实例,可以看到通过易得公式系统可以很容易的编写自己想要的函数。其实,系统自带的统计类函数,几乎都可以通过自定义函数自己来实现。  
值得一提的是,易得是市面上唯一能通过公式系统编写自定义函数的软件。  
 |