设为首页收藏本站

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

请问多个返回值的用户函数怎么调用? [复制链接]

Rank: 5Rank: 5

精华
0
UID
1654
积分
1042
帖子
246
主题
41
阅读权限
60
注册时间
2008-5-23
最后登录
2019-3-30
跳转到指定楼层
1#
发表于 2010-6-15 15:26:38 |只看该作者 |倒序浏览
引用参数
TradeBlazer公式的用户函数可以通过返回值,返回函数的计算结果,返回值只能是三种简单类型。当我们需要通过函数进行计算,返回多个值的时候,单个的返回值就不能满足需求了。在这种情况下,我们提出了引用参数的概念,引用参数是在调用的时候传入一个变量的地址,在用户函数内部会修改参数的值,在函数执行完毕,上层调用的公式会通过变量获得修改后的值。因为引用参数的使用是没有个数限制,因此,我们可以通过引用参数返回任意多个值。

例如,用户函数MyFunc如下:

Params
    NumericSeries   Price(0);
    NumericRef      oHigher(0);
    NumericRef      oLower(0);
Vars
    Numeric         Tmp(0);
Begin
    Tmp = Average(Price,10);
    oHigher = IIf(Tmp > High,Tmp,High);
    oLower = IIf(Tmp < Low,Tmp,Low);
    Return Tmp;
End

以上代码通过两个数值型引用参数返回10个周期的Price平均值和最高价的较大值oHigher,以及10个周期的Price平均值和最低价的较小值oLower,并且通过函数返回值输出10个周期的Price平均值。在调用该用户函数的公式中,可以通过调用该函数获得3个计算返回值,示例如下:

Vars
    Numeric AvgValue;
    Numeric        HigherValue;
    Numeric LowerValue;
Begin
    AvgValue = MyFunc(Close,HigherValue,LowerValue);
    ...
End



这是帮助文档里关于引用参数的地方,但是MyFunc函数中并没有返回多个值啊?它只返回了一个Tmp而已,怎样能实现它返回多个值呢?另外怎样调用多个返回值?

Rank: 5Rank: 5

精华
0
UID
1654
积分
1042
帖子
246
主题
41
阅读权限
60
注册时间
2008-5-23
最后登录
2019-3-30
2#
发表于 2010-6-15 18:51:51 |只看该作者
看了n遍,终于搞明白了

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
5940
积分
1179
帖子
285
主题
28
阅读权限
60
注册时间
2009-11-21
最后登录
2015-1-19
3#
发表于 2010-6-16 00:17:05 |只看该作者
啊  楼主讲讲心得
海豚

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
1654
积分
1042
帖子
246
主题
41
阅读权限
60
注册时间
2008-5-23
最后登录
2019-3-30
4#
发表于 2010-6-16 12:13:17 |只看该作者
Params
    NumericSeries   Price(0);
    NumericRef      oHigher(0);
    NumericRef      oLower(0);

参数一般是作为输入用的,但是上面这两个引用参数确是为函数输出用的,

    AvgValue = MyFunc(Close,HigherValue,LowerValue);

这里就是把myfunc的两个引用获得的值输出给了HigherValue和LowerValue。也就是调用了函数myfunc的两个引用型的返回值。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
5940
积分
1179
帖子
285
主题
28
阅读权限
60
注册时间
2009-11-21
最后登录
2015-1-19
5#
发表于 2010-6-17 14:22:37 |只看该作者
辛苦了  谢谢
海豚

使用道具 举报

Rank: 4

精华
0
UID
5975
积分
277
帖子
47
主题
10
阅读权限
50
注册时间
2009-11-24
最后登录
2019-1-18
6#
发表于 2011-4-1 16:02:32 |只看该作者
还是不懂~那么~AvgValue 的值到底是什么?

使用道具 举报

Rank: 4

精华
0
UID
5975
积分
277
帖子
47
主题
10
阅读权限
50
注册时间
2009-11-24
最后登录
2019-1-18
7#
发表于 2011-4-1 16:09:04 |只看该作者
那样是不是AvgValue =Average(Price,10)的值,而HigherValue=oHigher = IIf(Tmp > High,Tmp,High),LowerValue=oLower = IIf(Tmp < Low,Tmp,Low) 的意思?

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
0
UID
7437
积分
2872
帖子
537
主题
133
阅读权限
80
注册时间
2010-3-15
最后登录
2013-11-15
8#
发表于 2011-4-1 16:50:30 |只看该作者
本帖最后由 欲速不达 于 2011-4-1 17:09 编辑

回复 7# 放飞的翅膀

参数传入后究竟会返回什么值由这里
oHigher = IIf(Tmp > High,Tmp,High);
    oLower = IIf(Tmp < Low,Tmp,Low);
决定了,它不是同时输出三个值

如果要求用户函数在不同条件下输出不同的值,需要在公式里用if函数判断后输出。如:我们经常遇到在不同周期下日内平仓时间点不同,就可以先把不同周期类型和周期数值包装为一个用户函数,在公式中直接调用就可以实现自动辨认周期去选择不同时间点平仓了。

使用道具 举报

Rank: 4

精华
0
UID
5975
积分
277
帖子
47
主题
10
阅读权限
50
注册时间
2009-11-24
最后登录
2019-1-18
9#
发表于 2011-4-7 09:08:28 |只看该作者
回复  放飞的翅膀

参数传入后究竟会返回什么值由这里
oHigher = IIf(Tmp > High,Tmp,High);
    oLower = ...
欲速不达 发表于 2011-4-1 16:50


能否再列举一个实例?来说明一下返回的值到底等于什么?谢谢~

使用道具 举报

Rank: 1

精华
0
UID
269619
积分
24
帖子
23
主题
0
阅读权限
10
注册时间
2018-9-5
最后登录
2018-11-1
10#
发表于 2018-10-19 09:54:23 |只看该作者
mark

使用道具 举报

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

bottom

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

GMT+8, 2024-5-12 23:39

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部