您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

return语句的返回值类型与公式定义的返回值类型不符 [开拓者 TB]

  • 咨询内容: 以下用户函数编译一直出现 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

     

  • TB技术人员: 本帖最后由 wu778001035 于 2016-3-14 13:18 编辑

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

     

  • TB客服:
    wu778001035 发表于 2016-3-14 11:28
    你在文件--属性设置里有个返回类型,你选择数值型试试,或者你看下你其他的函数有编译完成的吗 ...

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

     

  • 网友回复:
    yanling 发表于 2016-3-14 20:30
    返回类型是数值型的
    我试了下,用软件自己带的函数范例,也是同样的错误,请问这是什么原因? ...

    可能是你的公式管理器里有某个错误的函数(并非当前编译的这个)而导致的问题。。
    到公式器--用户函数,将有问题的函数删除后再来编译其它的正确的函数。

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 511411198  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容