设为首页收藏本站

 找回密码
 注册
查看: 1147|回复: 0
打印 上一主题 下一主题

引用参数 多个函数返回值 NumericRef的用法 [复制链接]

Rank: 1

精华
0
UID
197235
积分
5
帖子
3
主题
2
阅读权限
10
注册时间
2014-11-18
最后登录
2019-10-16
跳转到指定楼层
1#
发表于 2019-8-31 14:13:14 |只看该作者 |倒序浏览
本帖最后由 dhqh8582217 于 2019-8-31 15:07 编辑

NumericRef的作用只有一个,就是在用户函数中传递return之外的其他返回值,所以NumericRef只能用在用户函数的参数栏里。用户函数的返回值只能有一个,就是return返回的计算结果。但是如果有3个结算结果,分别是A,B,C都要返回,怎么办?其实只要在用户函数的参数栏加入NumericRef  B;NumericRef C;然后用函数返回变量A(Return A; )这样就可以在公式中调用A,B,C,三个结果了。
公式里调用的方法很简单:(加入用户函数的名称叫newfun)
定义变量:X,Y,Z要让X=A;Y=B;Z=C,在公式里写:X = newfun(Y,Z);这样ABC的结果就传递给XYZ了
举例说明:编一个用户函数:myfun,要传递三个数:10日均线,20日高点,20日低点
//------------------------------------------------------------------------
// 简称: myfun
// 名称: myfun
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
    Numeric                   M;
    NumericRef      hhv20;  //返回20日高点
    NumericRef      llv20;   //返回20日低点
Vars
    Numeric         avgM;
Begin
    avgM = Average(close,M);        //M日均线
    hhv20 = Highest(h,20);            //20日高点
    llv20 = lowest(l,20);                //20日低      
    Return avgM;                     //返回10日均线
End

//------------------------------------------------------------------------
// 编译版本        GS2015.12.25
// 用户版本        2019/08/31 11:20:26
// 版权所有        dhqh8582217
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

这个函数就可以就可以传递三个变量: avgM,hhv20,llv20.其中avgM是通过return返回的,hhv20和llv20分别通过参数栏的“NumericRef      hhv20”和“NumericRef      llv20”返回的。
如果删除参数栏的NumericRef两行,则只能用Return返回 avgM。其他两个结果hhv20和llv20无法返回
下面演示如何在公式端接收这三个结果:公式名:test2
我们打算把 avgM  hhv20  llv20的值传递给公式里的变量:AvgValue  HigherValue LowerValue
代码:
//------------------------------------------------------------------------
// 简称: test2
// 名称: test2
// 类别: 公式应用
// 类型: 用户应用
//------------------------------------------------------------------------

Vars
    Numeric AvgValue;
    Numeric HigherValue;
    Numeric LowerValue;

Begin
    AvgValue= MyFun(10,HigherValue,LowerValue);

        /*上面这一行的解释: AvgValue得到的是函数MyFun之return的返回值,myfun的三个参数:
            10:是用户函数的参数M的取值
            HigherValue:放在第二个参数位置,目的是接收函数myfun的第二个NumericRef 后面的hhv20;
            LowerValue:放在第三个参数位置,目的是接收函数myfun的第三个NumericRef 后面的llv20;
            这行指令已经完成的三个变量的传递:
             avgM(10) ==>>  AvgValue;
             hhv20      ==>>  HigherValue;
             llv20       ==>>   LowerValue;
          此时,公式里的变量:AvgValue  HigherValue LowerValue都有了赋值,可以直接输出如下
         */
       
        PlotNumeric("avg10",AvgValue);
        PlotNumeric("high10",HigherValue);  
        PlotNumeric("low10",LowerValue);
End

//------------------------------------------------------------------------
// 编译版本        GS2015.12.25
// 用户版本        2019/08/31 11:23:51
// 版权所有        dhqh8582217
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

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

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-25 03:13

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部