UOC即终极摆动指标,百度一下,你会发现介绍里写它的功能很强大,而且有一套很明确的买卖系统,当然,我这里只解读它代码的意思,至于它的买卖规则到底行不行的通,要是有人喜欢这个指标,就自己测试了。
至于它的算法,意思是这样的,先找出三个周期不同的振荡指标,再将这些周期参数,按照反比例的方式,制作成常数因子。然后,依照加权的方式,将三个周期不同的振荡指标,分别乘以不同比例的常数,加以综合制作成UOS指标。
看这个具体代码前,先说下它涉及到的函数有四个,当然这四个我之前都已经解读过一遍了,这里也不再重复了,就是复制在下边,方便大家看了理解。
第一个,求真实范围函数TrueRange,代码如下:
Begin
If(CurrentBar == 0)
Return High - Low;
Else
Return TrueHigh - TrueLow;
End
第二个,求真实高点函数TrueHigh,代码如下:
Vars
Numeric THighValue;
Begin
THighValue = Close[1];
If(High >= Close[1])
THighValue = High;
Return THighValue;
End
第三个不用说了,就是求真实低点函数TrueLow,如下:
Vars
Numeric TLowValue;
Begin
TLowValue = Close[1];
If(Low <= Close[1])
TLowValue = Low;
Return TLowValue;
End
第四个,快速求和函数SummationFC,如下:
Params
NumericSeries Price(1);
Numeric Length(10);
Vars
NumericSeries SumValue(0);
Numeric i;
Begin
If(CurrentBar < Length)
{
SumValue = 0;
for i = 0 to Length - 1
{
SumValue = SumValue + Price[i];
}
}Else
{
SumValue = SumValue[1] + Price - Price[Length];
}
Return SumValue;
End
有了这四个函数,我们看具体代码时,只要一看到它们,就是返回到这个函数来求值了,现在看UOC的具体代码及解读如下:
Params
Numeric FastLength( 7 );//声明数值参数FastLength,初值为7,即用来求快速移动了。//
Numeric MidLength( 14 );//声明数值参数MidLength,初值为14,即求中速移动。//
Numeric SlowLength( 28 ) ;//声明数值参数SlowLength,初值为28,即求慢速移动。//
Vars
Numeric Factor1( 0 ); //声明数值变量Factor1,初值为0,即系数因子1了。//
Numeric Factor2( 0 ) ;//声明数值变量Factor2,初值为0,即系数因子2。//
Numeric Value1;//声明数值变量Value1。//
Numeric Value2;//声明数值变量Value2.//
Numeric Value3;//声明数值变量Value3.//
Numeric Value4;//声明数值变量Value4.//
Numeric Value5; //声明数值变量Value5.//
Numeric Value6;//声明数值变量Value6.//
Numeric Value7;//声明数值变量Value7.//
Numeric Value8;//声明数值变量Value8.//
Numeric Value9;//声明数值变量Value9.//
Numeric UOCValue;//声明数值变量UOCValue。//
Begin
Value1 = SummationFC( TrueRange, FastLength ) ;//意思就是快速求出5个周期内价格真实波动值的总和,把总和值赋值给变量Value1了。//
Value2 = SummationFC( TrueRange, MidLength ) ;//改变周期,同上解读。//
Value3 = SummationFC( TrueRange, SlowLength ) ;//改变周期,同上解读。//
Value4 = SummationFC( Close - TrueLow, FastLength ) ;//这个多了一步计算,但意思一样的,就是快速求出5个周期内以收盘价减去真实低点的波动值的总和,把总和赋值给变量Value4.//
Value5 = SummationFC( Close - TrueLow, MidLength ) ;//改变周期,同上解读。//
Value6 = SummationFC( Close - TrueLow, SlowLength ) ;//改变周期,同上解读。//
If( Value1 == 0 Or Value2 == 0 Or Value3 == 0 )//假如变量Value1等于0,或者变量Value2等于0,或者变量Value3等于0,这三个中只要有一个条件成立,就立即执行下列花括号代码。//
{
UOCValue = 0;//变量UOCValue =0 //
}Else//就是上面三个条件都不成立的情况下,执行下列代码。//
{
Factor1 = SlowLength / FastLength ;//代入相应参数,即系数因子Factor1 =28 / 7 了. //
Factor2 = SlowLength / MidLength ;//代入相应参数,系数因子Factor2 = 28 / 14了。//
Value7 = ( Value4 / Value1 ) * ( Factor1 ) ;//根据上面求得的值,代入相应数值,即可求出变量Value7的值了。//
Value8 = ( Value5 / Value2 ) * ( Factor2 ) ;//同上,代入相应值即可。//
Value9 = ( Value6 / Value3 ) ;//同上,代入相应值即可。//
UOCValue = ( Value7 + Value8 + Value9 ) / ( Factor1 + Factor2 + 1 ) ;//同理的,把求得的三个变量与两个系数因子代入,即可求得UOCValue值了。//
}
PlotNumeric(\"UOC\",UOCValue);//画线UOC线,值为UOCValue值了。//
End
代码其实不难的,只要知道了算法,根据算法写上相应代码,一步步执行下来,只要把相应的值先求出,后边的也就一点点把值求出来了。