欢迎您光临博庭社区!

 找回密码
 立即注册
查看: 7704|回复: 15

自定义”公共函数“的用法 [复制链接]

Rank: 8Rank: 8

发表于 2012-10-11 13:54:07 |显示全部楼层
本帖最后由 ptLibert 于 2012-10-12 20:11 编辑

在金魔方中新增了一类指标类型,“F公共函数”,这类指标有何用处呢?下面举例说明。
我们知道,同行软件会不断推出一些有用的函数,而金魔方暂时又没有内置,那怎么办?用公共函数自己实现就是。

例如,通x信有一个函数expmema,是金魔方目前还没有实现的,同时我们又知道它的算法,那就可以把它放到公共函数中。

首先:我们知道expmema的算法是这样的,用普通指标表示:
  1. #RunMode Run_By_Bar
  2. input :n(5,1,100000);
  3. maN:=ma(c,n);
  4. if(BarPos<n)then
  5.   cc:=invalid;
  6. else  
  7. if( BarPos==n) then
  8.   cc:= maN;  
  9. else
  10.   cc:=(2*c+ (n-1)*cc[1])/(n+1);
  11. expmema:cc;  
复制代码


显然,这么长的代码不太好直接使用。所以需要放到公共函数中:
我们在”F公共函数“类目下新建公式,取一个我们喜欢的名字,例如”myExpmEma"然后填入以下代码
  1. INPUT:
  2.   NumericSeries x,
  3.   Numeric n;
  4.   
  5. maN := ma(x, n);
  6. if(BarPos<n)then
  7.         cc:=invalid;
  8. else  if( BarPos==n) then
  9.         cc:= maN;  
  10. else
  11.         cc:=(2*x+ (n-1)*cc[1])/(n+1);
  12. return cc;  
复制代码


最后,我们可以建一个测试指标看看效果
  1. #RunMode Run_By_Bar
  2. myExpmEma( c, 5);
复制代码




使用道具 举报

Rank: 6Rank: 6

勇士奖

发表于 2012-10-11 14:49:32 |显示全部楼层
通x信    如果有N个参数要输出该怎么写呢,比如一个公式中有A ,B,D 三个参数要输出,return 后面怎么写?

使用道具 举报

Rank: 8Rank: 8

发表于 2012-10-11 17:50:04 |显示全部楼层
wh8510 发表于 2012-10-11 14:49
通x信    如果有N个参数要输出该怎么写呢,比如一个公式中有A ,B,D 三个参数要输出,return 后面怎么写 ...

好问题
公共函数指标支持两种特别的数据类型:numericRef和stringRef
这两种数据类型的特点是在函数内部的改变可以带到函数外

例如,我们撰写一个这样的公共函数refFunc
  1. INPUT:
  2.   Numeric P1,
  3.   NumericRef P2,
  4.   NumericRef P3,
  5.   StringRef P4;


  6.   p2:=p1+10;
  7.   p3:=p1+20;
  8.   P4:= NumToStr( c, 2 );
  9. return 1;
复制代码



然后再写一个这样的指标:
  1. #RunMode Run_By_Bar
  2. cc:=0;
  3. cc1:=0;
  4. str := '';
  5. aa:=refFunc( c, cc, cc1, str);
  6. cc;
  7. cc1;
  8. Comment( str );
复制代码
看看效果。

使用道具 举报

Rank: 6Rank: 6

勇士奖

发表于 2012-10-11 23:51:48 |显示全部楼层
谢谢管理员的解答,但是还有1个问题没有搞清楚。
1 ,这句 Comment( str ); 应该在走势图左上角显示收盘价吧,但是输出的确是一条数值为0的水平线,而且还会影响与主图K线的结合。而且第二个指标我是放在技术指标分类里面的,为什么每次载入的时候都是按照交易策略载入会出现策略设置,见下图。
附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

使用道具 举报

Rank: 8Rank: 8

发表于 2012-10-12 08:47:26 |显示全部楼层
wh8510 发表于 2012-10-11 23:51
谢谢管理员的解答,但是还有1个问题没有搞清楚。
1 ,这句 Comment( str ); 应该在走势图左上角显示收盘价 ...

这两个是bug,将在今天的升级中解决

使用道具 举报

Rank: 6Rank: 6

发表于 2012-11-4 06:57:02 |显示全部楼层
升级中解决了
学习成长中......榨油进行中......

使用道具 举报

Rank: 6Rank: 6

激情奖

发表于 2013-3-5 11:13:39 |显示全部楼层
好贴,学习 了
实盘->理念->技巧->量化->策略->自动交易系统->ctp_api

使用道具 举报

Rank: 6Rank: 6

发表于 2013-4-1 15:27:31 |显示全部楼层
ptLibert 发表于 2012-10-12 08:47
这两个是bug,将在今天的升级中解决

请问,公共函数必须在逐根模式下吗?
像TrueLow这样的?

点评

ptLibert  是的,必须逐根  发表于 2013-4-1 19:45

使用道具 举报

Rank: 6Rank: 6

发表于 2013-4-1 15:38:23 |显示全部楼层
ptLibert 发表于 2012-10-12 08:47
这两个是bug,将在今天的升级中解决

错误 行:47 列:7 变量:TRUELOW 没有初始化

使用道具 举报

Rank: 8Rank: 8

发表于 2013-4-1 19:48:02 |显示全部楼层
bluechina 发表于 2013-4-1 15:38
错误 行:47 列:7 变量:TRUELOW 没有初始化

什么样的公式

使用道具 举报

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

bottom

Archiver|http://www.patiosoft.com

GMT+8, 2017-12-11 17:34 , Processed in 0.043320 second(s), 12 queries .

花生网 Copyrigh©2012

和讯信息科技有限公司 ALL Rights Reserved 版权所有 复制必究

回顶部