开拓者期货期权程序化系统交易论坛

标题: 引用参数 多个函数返回值 NumericRef的用法 [打印本页]

作者: dhqh8582217    时间: 2019-8-31 14:13:14     标题: 引用参数 多个函数返回值 NumericRef的用法

本帖最后由 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公式修改和重写的权利
//------------------------------------------------------------------------






欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2