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

为啥这样计算两根K线之间的间距是错的? [开拓者 TB]

  • 咨询内容: 我想计算当前bar与满足条件的信号K线bar的索引号差值,即计算出满足条件的K线bar与当前bar间隔有多少根K线。
    因为每跟bar的索引值都会变动,所以我想使用一个逻辑变量来过滤满足条件的K线bar的索引值的变动,即出现了信号K线,记录下该K线bar的索引值后,就启用过滤条件,使该信

    号K线的索引值不受新出现的K的索引值的影响。设计了以下代码                                                                               
    Vars                                                                               
            Numeric SignalEntryCurrentBar;                //记录满足条件K线bar的索引值
            Bool EntryCondition;                        //开仓条件
            Bool EntrySignalFilter(False);                //开仓信号条件的逻辑过滤变量,初始值为不启用过滤
            Numeric i;                                //记录K线间距的变量               
    Begin
            If(!EntrySignalFilter)                        //当不启用信号过滤时
            {
                    If(EntryCondition==True)        //当满足开仓条件时
                    {
                            SignalEntryCurrentBar=CurrentBar;        //记录满足开仓条件的K线索引值
                            EntrySignalFilter=True;                        //启用信号过滤,目的是使信号条件的K线的索引值固定,不随之后每跟K线的索引值变动而变动
                    }
            }
            i=CurrentBar-SignalEntryCurrentBar;                        //记录当前K线与满足条件信号K线的间距

            Commentary("CurrentBar:"+Text(CurrentBar));
            Commentary("SignalEntryCurrentBar:"+Text(SignalEntryCurrentBar));
            Commentary("i:"+Text(i));
    End
    我是想记录了信号K线的索引值之后,改变EntrySignalFilter的值,使EntrySignalFilter=True,这样回到If(!EntrySignalFilter)的判断上,就会直接过滤掉中间的代码,但是

    这段代码根本起不到想要的作用,不知道哪里出现了问题。

     

  • TB技术人员: 多种方法可以实现。
    1. vars
    2.     numericseries myflag;
    3. begin
    4.    if(conditionbuy==true)
    5.    {
    6.        buy;
    7.        myflag = currentbar;
    8.    }
    9.     currentbar - myflag //就可以得到当前bar与信号位置之间间隔了多少K线。
    复制代码
    1. vars
    2.     numericseries myflag
    3. begin
    4.     if(conditionbuy)
    5.     {
    6.          buy;
    7.          myflag = 1;
    8.     }else
    9.     {
    10.          myflag = myflag+1;
    11.     }
    复制代码

     

  • TB客服:
    小米 发表于 2015-3-30 08:42
    多种方法可以实现。

    我就是使用第一种想法,但是没有效果。currentbar会随着每跟bar的更新而更新。比如说,均线的方向向上,这个条件在一定时间内都满足,但不一定就要在这个条件满足时就开始交易,还有其他的条件来控制交易。我是想要从一开始发生均线方向向上的时候,就记录下这个条件的bar的currentbar,然后这个值是固定的,不随着之后出现的bar的索引值的变动而变动(因为均线方向向上可能在第一次发生这个现象后都成立,而如果使用myflag=currentbar,每出现一根bar又满足均线方向的条件,myflag就会随着currentbar的变动而变动),我要用固定的myflag来计算之后的bar到第一次满足均线方向向上的条件的bar的之间的间距。

     

  • 网友回复:
    stephen49 发表于 2015-3-30 11:20
    我就是使用第一种想法,但是没有效果。currentbar会随着每跟bar的更新而更新。比如说,均线的方向向上, ...


    需要多加一个变量来控制记录的起始点就好。
    1. vars
    2.     numericseries myflag;
    3.     numericseries startbar;
    4. begin
    5.    if(condition==true && myflag==0)
    6.    {
    7.          startbar = currentbar;
    8.          myflag =1;
    9.   }
    10.   //但是要注意,在这段条件结束后,需要将myflag清零的动作。  
    复制代码

     

  • 网友回复:
    小米 发表于 2015-3-30 11:23
    需要多加一个变量来控制记录的起始点就好。

    我从新写了一下代码:
    Params
        Numeric MAPeriod(10);                        //定义MA周期
    Vars
            NumericSeries MAValue;               //定义MA变量
            Numeric i;                                 //储存K线间距值
            Numeric startbar(0);
            Bool Condition;
            numericseries myflag;
    Begin
            MAValue=Average(C,MAPeriod);               
            Condition = MAValue>MAValue[1];
            If(Condition==True && myflag==0)
            {
                    startbar=CurrentBar;
                    myflag=1;
            }
            i=CurrentBar-startbar;

            Commentary("CurrentBar:"+Text(CurrentBar));
            Commentary("startbar:"+Text(startbar));
            Commentary("i:"+Text(i));
    End
    我试过了,startbar还是随着每跟bar的变动而变动,i值永远都是0.你可以在图表上试一试。

 

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

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


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

相关文章

    没有相关内容