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

开拓者求N天前的收盘价closD(N)原理,源码[开拓者公式]

  • 咨询内容: //------------------------------------------------------------------------
    // 简称: CloseD
    // 名称: 求N天前的收盘价
    // 类别: 用户函数
    // 类型: 内建函数
    // 输出: 数值型
    //------------------------------------------------------------------------

    Params
            Numeric daysAgo(2);
    Vars
            NumericSeries barCnt;
            NumericSeries dayClose;
            Numeric i;
            Numeric j;
            Numeric nIndex(0);
            Numeric CBIndex;
    Begin
            CBIndex = CurrentBar;
            If(CBIndex == 0 || Date != Date[1])
            {
                    barCnt = 1;
            }Else
            {
                    barCnt = barCnt + 1;
            }
            dayClose = Close;
                   
            If(daysAgo == 0)
            {
                    return dayClose;//程序化交易 www.cxh99.com
            }Else
            {
                    For i = 1 To daysAgo
                    {
                            If( i == 1)
                            {       
                                    j = 0;
                            }Else
                            {
                                    j = j + BarCnt[j];                               
                            }
                            If (j > CBIndex )
                                    Return InvalidNumeric;
                            nIndex = nIndex + BarCnt[j];
                    }
                    Return dayClose[nIndex];
            }
    End

    //------------------------------------------------------------------------
    // 编译版本        GS2010.12.08
    // 版权所有        TradeBlazer Software 2003-2010
    // 更改声明        TradeBlazer Software保留对TradeBlazer平
    //                        台每一版本的TradeBlazer公式修改和重写的权利
    //------------------------------------------------------------------------

     

  • TB技术人员:
    BarCnt记录的是从当天第一根K线到当前K线的K线数
    所以回溯BarCnt就可得到前一天最后一K的收盘价,也就是CloseD(1)
    当回溯天数大于1,比如2:
    1. For i = 1 To daysAgo

    2.                 {

    3.                         If( i == 1)

    4.                         {      

    5.                                 j = 0;

    6.                         }Else

    7.                         {

    8.                                 j = j + BarCnt[j];                              

    9.                         }

    10.                         If (j > CBIndex )

    11.                                 Return InvalidNumeric;

    12.                         nIndex = nIndex + BarCnt[j];
    复制代码i = 1时,j=0,nIndex = 0 + BarCnt[0] = BarCnt(cxh99.com),也就是回溯到前一天的最后一K;
    i = 2,j = 0 + BarCnt[0] = BarCnt
    nIndex = BarCnt+BarCnt[BarCnt]
    也就是回溯到前一天的前一天的最后一K;

    OK,以此类推。

     

  • TB客服: 谢谢楼上,有一点懂了;
    但是还有一点不明白,barCnt是NumericSeries,也就是序列,但是barCnt的每个元素并没有初始赋值呀,真是奇怪了。
    比如:nIndex = BarCnt+BarCnt[BarCnt];
    BarCnt[BarCnt]没有初始赋值,就使用,不会出错吗?

     

  • 网友回复: 比如以下代码:
    Begin
            CBIndex = CurrentBar;
            If(CBIndex == 0 || Date != Date[1])
            {
                    barCnt = 1;
            }Else
            {
                    barCnt = barCnt + 1;
            }//www.cxh99.com

    如果第一次执行Else里面的代码,barCnt = barCnt + 1;而barCnt没有初始值,不会出错吗?

     

  • 网友回复: 程序是从图上第一根K线开始执行的

    此时CBIndex == 0成立,barCnt = 1,没有问题

 

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

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

 


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

相关文章

    没有相关内容