设为首页收藏本站

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

return语句的返回值类型与公式定义的返回值类型不符 [复制链接]

Rank: 1

精华
0
UID
228272
积分
11
帖子
7
主题
2
阅读权限
10
注册时间
2016-2-17
最后登录
2016-3-16
跳转到指定楼层
1#
发表于 2016-3-13 13:38:53 |只看该作者 |倒序浏览
以下用户函数编译一直出现 return语句的返回值类型与公式定义的返回值类型不符 C0122的错误,哪位大侠知道是为什么?

// 简称: MtBar
// 名称: 跨周期1
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
Numeric TimeFrame(1440);   
// 目标时间周期:月线=40320,周线=10080,日线=1440,4小时线=240
// 其他1小时内的周期等于相应的分钟数,如:1小时=60, 30分钟=30。。。
// 支持不规则分钟数,如3分钟,8分钟,之类都行
Numeric BarsBack(1);
// 目标时间周期BAR偏移:
// 1--表示将目标时间周期下的前1根K线数据作为与当前Bar对应的目标时间周期下的K线数据
// 0--表示将目标时间周期下的截止到目前为止的数据转换为与当前BAR对应的目标时间周期下K线数据
NumericRef oCurBar;                 // 目标时间周期下的Bar索引
NumericRef oOpenHT;
// 目标时间周期下的开盘价
NumericRef oHighHT;
// 目标时间周期下的最高价
NumericRef oLowHT;          // 目标时间周期下的最低价
NumericRef oCloseHT;        // 目标时间周期下的收盘价
NumericRef oVolHT;          // 目标时间周期下的成交量
NumericRef oOpenIntHT;      // 目标时间周期下的持仓量

Vars

NumericSeries barCnt;
NumericSeries CurBar;
NumericSeries barCntSum;
NumericSeries OpenHT;
NumericSeries HighHT;
NumericSeries LowHT;
NumericSeries CloseHT;
NumericSeries VolHT;
NumericSeries OpenIntHT;
Numeric CurTime;
Numeric PreTime;
bool condition(false);
Numeric i;

Begin

If (TimeFrame==40320)                 // 月线
{
CurTime=Month;
PreTime=Month[1];
}
Else If (TimeFrame==10080)                        // 周线
{
CurTime=IntPart(DateDiff(19700105,Date)/7);
PreTime=IntPart(DateDiff(19700105,Date[1])/7);
}
Else                                                                        // 其他时间周期
{
CurTime=IntPart((DateDiff(19700105,date)*1440+Hour*60+Minute)/TimeFrame);
PreTime=IntPart((DateDiff(19700105,date[1])*1440+Hour[1]*60+Minute[1])/TimeFrame);
}
condition=CurTime!=PreTime;
If (CurrentBar==0)                // 如果是第一根Bar, CurBar=0
{
barCnt=0;
CurBar=0;
OpenHT=Open;
HighHT=High;
LowHT=Low;
CloseHT=Close;
VolHT=Vol;
OpenIntHT=OpenInt;
}
Else
{
If(Condition)               
// 如果在目标周期下,属于另一根K线,则CurBar加1
{
barCnt=1;
CurBar=CurBar[1]+1;
OpenHT=Open;
HighHT=High;
LowHT=Low;
VolHT=Vol;
}
Else
// 如果在目标周期下,属于同一根K线,则CurBar不变,但最高价和最低价要记录价格的变化,成交量要累加
{
barCnt=barCnt[1]+1;
CurBar=CurBar[1];
OpenHT=OpenHT[1];
HighHT=Max(HighHT[1],High);
LowHT=Min(LowHT[1],Low);
VolHT=VolHT[1]+Vol;
}
// 收盘价和持仓量总是取最新值
CloseHT=Close;
OpenIntHT=OpenInt;
}
// 上面的程序,在每根小周期的K线上,记录了它所属的大时间周期下的开高低收等值的变化。
// 接下来,要把在大的时间周期级别上,属于同一根K线的开高低收这些数据,记录在这一组小周期K线的最后一根上。
barCntSum=barCnt ;
If(BarsBack==0)
// 如果Bar偏移参数为0,则取每根小周期K线上保留的大时间周期截止到这根小周期K线为止的BAR数据
{
barCntSum=0 ;
}Else If(BarsBack==1)
// 如果Bar偏移参数为1,则取大时间周期的上一根K线的BAr数据
{
barCntSum=barCnt ;
}Else
// 如果BAR偏移参数为其他,则取大时间周期的指定偏移后的那根K线的BAR数据
{
For i=2 To BarsBack
{
barCntSum=barCntSum+barCnt[barCntSum];
}
}
// 最后将相应的K线数据作为引用参数返回
oCurBar=CurBar;
oOpenHT=OpenHT[barCntSum];
oHighHT=HighHT[barCntSum];
oLowHT=LowHT[barCntSum];
oCloseHT=CloseHT[barCntSum];
oVolHT=VolHT[barCntSum];
oOpenIntHT=OpenIntHT[barCntSum];
Return barCnt;

End

Rank: 10Rank: 10Rank: 10

精华
0
UID
209716
积分
2226
帖子
2131
主题
0
阅读权限
200
注册时间
2015-5-25
最后登录
2020-5-29
2#
发表于 2016-3-14 11:28:02 |只看该作者
本帖最后由 wu778001035 于 2016-3-14 13:18 编辑

你在文件--属性设置里有个返回类型,你选择数值型试试,或者你看下你其他的函数有编译完成的吗

使用道具 举报

Rank: 1

精华
0
UID
228272
积分
11
帖子
7
主题
2
阅读权限
10
注册时间
2016-2-17
最后登录
2016-3-16
3#
发表于 2016-3-14 20:30:14 |只看该作者
wu778001035 发表于 2016-3-14 11:28
你在文件--属性设置里有个返回类型,你选择数值型试试,或者你看下你其他的函数有编译完成的吗 ...

返回类型是数值型的
我试了下,用软件自己带的函数范例,也是同样的错误,请问这是什么原因?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
4#
发表于 2016-3-15 15:30:41 |只看该作者
yanling 发表于 2016-3-14 20:30
返回类型是数值型的
我试了下,用软件自己带的函数范例,也是同样的错误,请问这是什么原因? ...

可能是你的公式管理器里有某个错误的函数(并非当前编译的这个)而导致的问题。。
到公式器--用户函数,将有问题的函数删除后再来编译其它的正确的函数。
已有 2 人评分威望 收起 理由
l137741 + 2 很给力!
yanling + 2 很给力!

总评分: 威望 + 4   查看全部评分

使用道具 举报

Rank: 1

精华
0
UID
198379
积分
5
帖子
5
主题
0
阅读权限
10
注册时间
2014-12-5
最后登录
2021-5-14
5#
发表于 2021-3-3 20:54:22 |只看该作者
这个后来怎么解决的?我也同样问题,系统的函数复制出来编译就出现问题

使用道具 举报

Rank: 4

精华
0
UID
110114
积分
380
帖子
314
主题
16
阅读权限
50
注册时间
2012-4-20
最后登录
2021-12-29
6#
发表于 2021-3-4 08:25:37 |只看该作者
barCnt是序列变量NumericSeries,返回值是不是要求为Numeric的才行。可以试一试。

使用道具 举报

Rank: 1

精华
0
UID
198379
积分
5
帖子
5
主题
0
阅读权限
10
注册时间
2014-12-5
最后登录
2021-5-14
7#
发表于 2021-3-4 19:54:48 |只看该作者
Yuen_Lee 发表于 2021-3-4 08:25
barCnt是序列变量NumericSeries,返回值是不是要求为Numeric的才行。可以试一试。 ...

试验过了,不行。看版主说是错误的函数,但是用户函数都是系统自带的编译过的

使用道具 举报

Rank: 4

精华
0
UID
110114
积分
380
帖子
314
主题
16
阅读权限
50
注册时间
2012-4-20
最后登录
2021-12-29
8#
发表于 2021-3-5 07:57:23 |只看该作者
我试验了一下,可以编译,只是提示IF语句中包含序列变量,容易出错,没有提示返回类型不符。我用的是旗舰版v5.6。

使用道具 举报

Rank: 1

精华
0
UID
198379
积分
5
帖子
5
主题
0
阅读权限
10
注册时间
2014-12-5
最后登录
2021-5-14
9#
发表于 2021-3-13 22:45:48 |只看该作者
Yuen_Lee 发表于 2021-3-5 07:57
我试验了一下,可以编译,只是提示IF语句中包含序列变量,容易出错,没有提示返回类型不符。我用的是旗舰版 ...

谢谢了,是新建用户函数的时候,模板需选择数值型,之前我都没有选择,默认是BOOL型引起的

使用道具 举报

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

bottom

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

GMT+8, 2024-5-6 06:06

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部