- 精华
- 0
- 在线时间
- 102 小时
- UID
- 20707
- 积分
- 164
- 帖子
- 22
- 阅读权限
- 40
- 注册时间
- 2010-12-1
- 最后登录
- 2016-5-18
- 精华
- 0
- UID
- 20707
- 积分
- 164
- 帖子
- 22
- 主题
- 8
- 阅读权限
- 40
- 注册时间
- 2010-12-1
- 最后登录
- 2016-5-18
|
TB里的KD,K值和D值计算方式和正规的KD是不一样的。。测试下来,大部分趋势品种是正规KD,两线交叉的系统盈利好过TB中的KD。
这里是我自己用TB编写的,正规(也就是文华财经,博弈大师等软件中的KD计算方法)KD公式。
希望对你有帮助,你可以没事测试测试。。
TB中的KD于,正规KD同列,技术指标:
Params
Numeric Length(14);
Numeric SlowLength(3);
Numeric SmoothLength(3);
Vars
NumericSeries HighestValue;
NumericSeries LowestValue;
NumericSeries KValue;//TB中的K
NumericSeries DValue;//TB中的D
NumericSeries K001;//正规K
NumericSeries D001;//正规D
NumericSeries RSV001;
Begin
HighestValue = HighestFC(High, Length);
LowestValue = LowestFC(Low, Length);
RSV001 = (Close-LowestValue)/(HighestValue-LowestValue)*100;//正规KD计算要先计算RSV,TB的KD计算没有使用RSV
KValue = Summation(Close - LowestValue,SlowLength)/Summation(HighestValue-LowestValue,SlowLength)*100;
DValue = Average(KValue,SmoothLength);
K001 = SMA(RSV001,SlowLength,1);
D001 = SMA(K001,SmoothLength,1);
PlotNumeric("K",K001);
PlotNumeric("D",D001);
PlotNumeric("K-TB",KValue);
PlotNumeric("D-TB",DValue);
//PlotNumeric("RSV",RSV001);
End
正规KD的金叉方法交易指令公式:
(为了方便大家测试比较正常KD与,TB中的KD收益,这里设置了testmode参数,设置为0时,正规版KD,设置为1时,TB版本的KD。)
Params
Numeric Length(14);
Numeric SlowLength(3);
Numeric SmoothLength(3);
Numeric lots(1);
Numeric testmode(0);//取0为正常版本KD值交易,取1为TB版本KD值交易
Vars
NumericSeries HighestValue;
NumericSeries LowestValue;
NumericSeries KValue;//TB中的K值
NumericSeries DValue;//TB中的K值
NumericSeries RSV;
NumericSeries K1;//正规的K值
NumericSeries D1;//正规的D值
Begin
HighestValue = HighestFC(High, Length);
LowestValue = LowestFC(Low, Length);
//TB计算KD
KValue = SummationFC(Close - LowestValue,SlowLength)/SummationFC(HighestValue-LowestValue,SlowLength)*100;
DValue = AverageFC(KValue,SmoothLength);
//正规KD计算方式
RSV = (Close-LowestValue)/(HighestValue-LowestValue)*100;
K1 = SMA(RSV,SlowLength,1);
D1 = SMA(K1,SmoothLength,1);
//调节参数testmode的值,取0调用正常版本KD,取1为TB版本
if(testmode == 0) //此时正常版KD
{
if(CrossOver(K1,D1))
{
buy(lots,Close);
}
if(CrossUnder(K1,D1))
{
SellShort(lots,Close);
}
}
if(testmode == 1) //此时TB版KD
{
if(CrossOver(KValue,DValue))
{
buy(1,Close);
}
if(CrossUnder(KValue,DValue))
{
SellShort(1,Close);
}
}
End |
|