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

RSI的第一个值是怎么来的 [开拓者 TB]

  • 咨询内容: 刚开始学TB,请教一下RSI的计算。
    If(CurrentBar <= Length - 1)的时候Close[Length] 的值都是空的,那么NetChgAvg = ( Close - Close[Length] ) / Length 应该也是空值,那么第一个NetChgAvg的值是怎么计算来的,谢谢。
    1. //------------------------------------------------------------------------
    2. // 简称: RSI
    3. // 名称: 相对强弱指数
    4. // 类别: 公式应用
    5. // 类型: 内建应用
    6. //------------------------------------------------------------------------

    7. Params
    8.         Numeric Length(14) ;
    9.         Numeric OverSold(30) ;
    10.         Numeric OverBought(70) ;
    11. Vars
    12.         NumericSeries NetChgAvg( 0 );
    13.         NumericSeries TotChgAvg( 0 );
    14.         Numeric SF( 0 );
    15.         Numeric Change( 0 );       
    16.         Numeric ChgRatio( 0 ) ;
    17.         Numeric RSIValue;
    18. Begin       
    19.         If(CurrentBar <= Length - 1)
    20.         {
    21.                 NetChgAvg = ( Close - Close[Length] ) / Length ;
    22.                 TotChgAvg = Average( Abs( Close - Close[1] ), Length ) ;
    23.         }Else
    24.         {
    25.                 SF = 1/Length;
    26.                 Change = Close - Close[1] ;
    27.                 NetChgAvg = NetChgAvg[1] + SF * ( Change - NetChgAvg[1] ) ;
    28.                 TotChgAvg = TotChgAvg[1] + SF * ( Abs( Change ) - TotChgAvg[1] ) ;       
    29.         }
    30.        
    31.         If( TotChgAvg <> 0 )
    32.         {
    33.                 ChgRatio = NetChgAvg / TotChgAvg;
    34.         }else
    35.         {
    36.                 ChgRatio = 0 ;
    37.         }       
    38.         RSIValue = 50 * ( ChgRatio + 1 );       
    39.         PlotNumeric("RSI",RSIValue);
    40.         PlotNumeric("超买",OverBought);
    41.         PlotNumeric("超卖",OverSold);
    42. End

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

     

  • TB技术人员: 自己搞明白了,原来Bar数据、序列变量在回溯越界时用该数据源的第1个值代替,而不是返回空值。

     

  • TB客服:
    if(hitoday>=ssetup and marketposition>-1 and GetGlobalVar(1)<1)
            {
                    If(Low<=(senter+(hitoday-ssetup)/div))
                    {
                            SellShort(1,senter+(hitoday-ssetup)/div);
                            SetGlobalVar(1,Time);
                            Return;
                    }
            }
            if(ltoday<=bsetup and marketposition<1  and GetGlobalVar(1)<1)
            {
                    If(High>=(benter-(bsetup-ltoday)/div))
                    {
                            Buy(1,benter-(bsetup-ltoday)/div);
                            SetGlobalVar(1,Time);
                           Return;
                    }
            }
    这一段可能会出现同一根BAR既满足high值高于ssetup,又满足Low<=(senter+(hitoday[1]-ssetup)/div)的情况,但实际无法判断先后。

    改成
            if(hitoday[1]>=ssetup and marketposition>-1 and GetGlobalVar(1)<1 &&date==date[1])
            {
                  If(Low<=(senter+(hitoday[1]-ssetup)/div))
                    {
                            SellShort(1,senter+(hitoday[1]-ssetup)/div);
                            SetGlobalVar(1,Time);
                            Return;
                    }
            }
            if(ltoday[1]<=bsetup and marketposition<1  and GetGlobalVar(1)<1 &&date==date[1])
            {
                    If(High>=(benter-(bsetup-ltoday[1])/div))
                    {
                            Buy(1,benter-(bsetup-ltoday[1])/div);
                            SetGlobalVar(1,Time);
                    Return;
                    }
            }
    这样子会不会好一点?还有后面的if(marketposition==0)那一段貌似也得加上跳空判断~    本人在实盘观察过的确有实盘闪烁过。还要自己仔细看一看啦!

     

  • 网友回复:

    if(hitoday>=ssetup and marketposition>-1 and GetGlobalVar(1)<1)
            {
                    If(Low<=(senter+(hitoday-ssetup)/div))
                    {
                            SellShort(1,senter+(hitoday-ssetup)/div);
                            SetGlobalVar(1,Time);
                            Return;
                    }
            }
            if(ltoday<=bsetup and marketposition<1  and GetGlobalVar(1)<1)
            {
                    If(High>=(benter-(bsetup-ltoday)/div))
                    {
                            Buy(1,benter-(bsetup-ltoday)/div);
                            SetGlobalVar(1,Time);
                           Return;
                    }
            }
    这一段可能会出现同一根BAR既满足high值高于ssetup,又满足Low<=(senter+(hitoday[1]-ssetup)/div)的情况,但实际无法判断先后。

    改成
            if(hitoday[1]>=ssetup and marketposition>-1 and GetGlobalVar(1)<1 &&date==date[1])
            {
                  If(Low<=(senter+(hitoday[1]-ssetup)/div))
                    {
                            SellShort(1,senter+(hitoday[1]-ssetup)/div);
                            SetGlobalVar(1,Time);
                            Return;
                    }
            }
            if(ltoday[1]<=bsetup and marketposition<1  and GetGlobalVar(1)<1 &&date==date[1])
            {
                    If(High>=(benter-(bsetup-ltoday[1])/div))
                    {
                            Buy(1,benter-(bsetup-ltoday[1])/div);
                            SetGlobalVar(1,Time);
                    Return;
                    }
            }
    这样子会不会好一点?还有后面的if(marketposition==0)那一段貌似也得加上跳空判断~    本人在实盘观察过的确有实盘闪烁过。还要自己仔细看一看啦!

 

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

可联系技术人员 QQ: 1145508240  有需要帮忙请点击这里留言!!!进行 有偿 编写!不贵!点击查看价格!


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

相关文章

    没有相关内容