易得程序化交易技术论坛

登录 | 注册

积分: 0 |用户组: 游客

搜索
查看: 3959|回复: 3

自定义函数简介

[复制链接]

22

主题

65

帖子

1423

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1423
发表于 2022-6-25 22:42:02 | 显示全部楼层 |阅读模式
    开发公式的朋友可能经常会遇到这样一个问题:有个很好的策略想法,但编写的过程发现缺少某些函数,自己的策略思路表达不出来,向软件开发商提出需求却又难以得到回应。

    易得公式系统的自定义函数就是为了解决此类问题应运而生,用户可以将自己的想法写成一个函数,在公式中可以自由调用,也可以导出共享给其他人。

    自定义函数的推出,使得易得公式系统的可编程能力有了质的飞越,意味着易得公式系统向高级编程语言看齐迈出了实质性的一步。

1. 什么是函数

    计算机语言中的函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的数据,也可以不接收。接收用户数据的函数在定义时要指明参数,不接收用户数据的不需要指明,根据这一点可以将函数分为有参函数和无参函数。

    函数可以有个返回值,将计算结果返回给调用者。

2. 自定义函数的类型

    易得公式系统的自定义函数有两种类型:全局自定义函数和局部自定义函数。两者的语法都是一样的,区别在于定义的位置和使用的作用域不同。

    1) 全局自定义函数

    在易得公式系统的“自定义函数”分类下,其跟技术指标、五彩K线、交易系统、条件选股等分类是平级的。在这个分类下创建的的自定义函数,可以供任何外部公式调用,但其自身不具备有执行能力,它只是个被调用者的角色。

    1.png

    在开发公式时,编写好的全局自定义函数,还可以在插入函数对话框的自定义函数分类中找出。

    2.png

    2) 局部自定义函数

    局部自定义函数的不同之处是它的定义可以出现在任何公式的里面,在本公式出现的自定义函数,只可以在本公式内调用,不能被其他公式调用。当然,局部自定义函数的定义必须出现被调用的前面。

    如下例,在技术指标公式中,定义一个MyFunc局部自定义函数,并在本公式内调用输出Mul的结果值。

  1. function MyFunc(x,n)
  2. begin
  3.     a:=x*n;
  4.     return a;
  5. End

  6. Mul:MyFunc(c,5);
复制代码

3. 自定义函数的语法

关键字:function
用来声明定义一个自定义函数
  1. function AAAA(X, N) // 定义名为AAA的自定义函数,参数X、N。
  2. function BBB        // 定义名为BB的自定义函数,无参数。
复制代码

关键字:return
自定义函数返回,只能用在自定义函数体中。  
语法:  
  1. return var;    // 自定义函数立即返回,带返回值var。后面语句不会执行。
  2. return;        // 自定义函数立即返回,不带返回值。后面语句不会执行。
复制代码

1) 有参数自定义函数
  1. function AAAA(X, N) // 定义名为AAA的自定义函数,参数X、N。
  2. begin               // 自定义函数必须以BEGIN开始
  3.     res := X * N;
  4.     return res;     // 自定义函数返回,带返回值res.
  5. end                 // 自定义函数必须以END结尾

  6. A:AAA(c, 5);        // 自定义函数的调用
复制代码

2) 无参数自定义函数
  1. function BBB    // 定义名为BB的自定义函数,没有参数。
  2. begin           // 自定义函数必须以BEGIN开始
  3.     res := c * 5;
  4.     return res; // 自定义函数返回,带返回值res.
  5. end             // 自定义函数必须以END结尾

  6. B:BBB;          // 自定义函数的调用
复制代码

4. 自定义函数的使用规则

1) 函数体内不能显式输出指标线数据.  
2) 函数体内不能使用外部变量,如果需要使用必须以函数参数的方式传入。但函数体内可以使用公式参数和VARIABLE变量。  
3) 函数的参数以及函数体内的变量,都可以跟外部变量同名.


5. 自定义函数的实例

例子1:求平均线,等价于系统提供的函数MA  
  1. function myma(x, n)  
  2. begin  
  3.     n:=intpart(n);  // 均线天数取整,防止传入浮点数  
  4.     if currcalcbar >= n then  
  5.     begin  
  6.         sums:=0;  
  7.         for i=currcalcbar downto currcalcbar-n+1 do  
  8.             sums := sums+x[i];  
  9.         sums:=sums/n;  
  10.         return sums;  
  11.     end   
  12. end  
  13.   
  14. a:myma(c,5);  // 调用自定义函数myma。结果与 b:ma(c,5); 一样  
复制代码

例子2:条件跟随函数,等价于系统提供的函数VALUEWHEN
  1. function myvaluewhen(condi, x)
  2. begin
  3.     result:=invaliddata;
  4.      
  5.     if condi > 0 then   
  6.         result:=x;
  7.     else if currcalcbar > 1 then
  8.         result:=result[currcalcbar-1];
  9.    
  10.     return result;
  11. end   

  12. a:myvaluewhen(c>o,1); // 调用myvaluewhen。结果与 b:valuewhen(c>o,1);一样  
复制代码

通过上面的2个实例,可以看到通过易得公式系统可以很容易的编写自己想要的函数。其实,系统自带的统计类函数,几乎都可以通过自定义函数自己来实现。

值得一提的是,易得是市面上唯一能通过公式系统编写自定义函数的软件。

回复

使用道具 举报

1

主题

8

帖子

61

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
61
发表于 2022-7-12 23:05:51 | 显示全部楼层
终于有软件可以编写自定义函数了,
回复

使用道具 举报

0

主题

5

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2024-6-5 16:13:38 | 显示全部楼层
问一下可以自定义全局变量吗。。
回复

使用道具 举报

0

主题

5

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2024-6-5 16:15:21 | 显示全部楼层
1、在公式编辑器中。。选择任意字符串。。然后按右键选择替换字符串会自动在替换窗口中显示。。但如果选择的是中文字符串就不行。。希望改善。。
2、在公式编辑器中。。在任意语句的最前面输入双斜杠可以注释该语句。。但要手工输入很不方便。。希望在右键菜单中添加【注释】和【取消注释】选项。。只要用鼠标选择了相应的行然后右键菜单中再选择【注释】就可以对整个语句块进行注释。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|易得程序化 ( 粤ICP备2022064048号 )

GMT+8, 2025-4-28 06:55 , Processed in 0.059378 second(s), 21 queries .

快速回复 返回顶部 返回列表