RSI的第一个值是怎么来的 [开拓者 TB]
- 咨询内容:
刚开始学TB,请教一下RSI的计算。
If(CurrentBar <= Length - 1)的时候Close[Length] 的值都是空的,那么NetChgAvg = ( Close - Close[Length] ) / Length 应该也是空值,那么第一个NetChgAvg的值是怎么计算来的,谢谢。- //------------------------------------------------------------------------
- // 简称: RSI
- // 名称: 相对强弱指数
- // 类别: 公式应用
- // 类型: 内建应用
- //------------------------------------------------------------------------
- Params
- Numeric Length(14) ;
- Numeric OverSold(30) ;
- Numeric OverBought(70) ;
- Vars
- NumericSeries NetChgAvg( 0 );
- NumericSeries TotChgAvg( 0 );
- Numeric SF( 0 );
- Numeric Change( 0 );
- Numeric ChgRatio( 0 ) ;
- Numeric RSIValue;
- Begin
- If(CurrentBar <= Length - 1)
- {
- NetChgAvg = ( Close - Close[Length] ) / Length ;
- TotChgAvg = Average( Abs( Close - Close[1] ), Length ) ;
- }Else
- {
- SF = 1/Length;
- Change = Close - Close[1] ;
- NetChgAvg = NetChgAvg[1] + SF * ( Change - NetChgAvg[1] ) ;
- TotChgAvg = TotChgAvg[1] + SF * ( Abs( Change ) - TotChgAvg[1] ) ;
- }
-
- If( TotChgAvg <> 0 )
- {
- ChgRatio = NetChgAvg / TotChgAvg;
- }else
- {
- ChgRatio = 0 ;
- }
- RSIValue = 50 * ( ChgRatio + 1 );
- PlotNumeric("RSI",RSIValue);
- PlotNumeric("超买",OverBought);
- PlotNumeric("超卖",OverSold);
- End
- //------------------------------------------------------------------------
- // 编译版本 GS2010.12.08
- // 版权所有 TradeBlazer Software 2003-2010
- // 更改声明 TradeBlazer Software保留对TradeBlazer平
- // 台每一版本的TradeBlazer公式修改和重写的权利
- //------------------------------------------------------------------------
- //------------------------------------------------------------------------
- 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 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容