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

开拓者参数声明的数据类型错误 [开拓者 TB]

  • 咨询内容: 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技术人员: 回复 1# kspdjm


    公式应用中不需要使用NumericRef引用参数类型

 

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

可联系技术人员 QQ: 262069696  点击在线交流进行 有偿 编写!不贵!点击查看价格!


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

相关文章

    没有相关内容