开拓者期货期权程序化系统交易论坛
标题:
引用参数 多个函数返回值 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