- 精华
- 0
- 在线时间
- 0 小时
- UID
- 63847
- 积分
- 16
- 帖子
- 2
- 阅读权限
- 10
- 注册时间
- 2011-9-6
- 最后登录
- 2011-9-8
- 精华
- 0
- UID
- 63847
- 积分
- 16
- 帖子
- 2
- 主题
- 1
- 阅读权限
- 10
- 注册时间
- 2011-9-6
- 最后登录
- 2011-9-8
|
//------------------------------------------------------------------------
// 简称: OLS
// 名称: 最小二乘估计回归均线
// 类别: 公式应用
// 类型: 用户应用
// 输出: TB技术交流群QQ:105942785
//------------------------------------------------------------------------
// 应用周期:分钟级别,最好是1分钟
Params
Numeric Length(5);
Vars
NumericSeries n;
Numeric iN;
Numeric B0;
Numeric B1;
NumericSeries X;
Numeric y;
NumericSeries OlsValue;
Numeric i;
Numeric Sum1(0);
Numeric Sum2(0);
Numeric Sum3(0);
Numeric Sum4(0);
Numeric Sum5(0);
Numeric Sum6(0);
Numeric Sum7(0);
Numeric Sum8(0);
Numeric Sum9(0);
Numeric Sum10(0);
Numeric Sum11(0);
Numeric Sum12(0);
NumericSeries Y0;
Numeric Yi;
Numeric YA;
Numeric SY;
Numeric X0;
Numeric XA;
Numeric TA(2);
Numeric R;
Numeric EndTime;
Numeric UpperBrand;
Numeric LowerBrand;
Begin
n = n[1];
X = X[1];
OlsValue = OlsValue[1];
Y0 = Y0[1];
If(BarType == 1 || Left(Symbol,2) != "IF")
EndTime = 0.1460 - 0.0001*BarInterval;
// ------------------ 计算拟合回归 ------------------
If(BarStatus == 0 || Date != Date[1])
{
n = 1;
X = 1;
y = Close;
Y0 = y;
}
Else
{
n = n + 1;
iN = n;
If(BarType == 1)
{
X = X + BarInterval;
}
Else
{
Alert("请选择分钟周期");
Return;
}
For i = 1 to iN
{
Sum1 = Sum1 + X[n-i]*Close[n-i];
}
For i = 0 to iN-1
{
Sum2 = Sum2 + X[i];
}
For i = 1 to iN
{
Sum3 = Sum3 + Close[n-i];
}
For i = 0 to iN-1
{
Sum4 = Sum4 + X[i]*X[i];
}
Sum5 = Sum2*Sum2;
B1 = (n*Sum1 - Sum2*Sum3)/(n*Sum4 -Sum5);
B0 = Sum3/n - B1*(Sum2/n);
//y = B0 + B1*n;
y = B0 + B1*n*0.75;
//y = B0 + B1*(n+1);
}
OlsValue = y;
PlotNumeric("曲线:", y, 0, Cyan);
If(BarStatus == 0 || BarStatus == 2 || Date != Date[1] || Time == EndTime)
PlotNumeric("直线:", y, 0, Magenta);
Else
{
y = InvalidNumeric;
PlotNumeric("直线:", y, 0, Magenta);
}
PlotNumeric("开盘:", OpenD(0), 0, White);
// ------------------ 预测置信区间 ------------------
X0 = X[n-1];
XA = Sum2/iN;
Sum6 = Sqr(X0 - XA);
For i = 0 to iN-1
{
Sum7 = Sum7 + Sqr(X[i] - XA);
}
Sum8 = Sqrt(1 + 1/iN + Sum6/Sum7);
For i = 0 to iN-1
{
Yi = B0 + B1*i;
Sum9 = Sum9 + Sqr(Close[i] - Yi);
}
If(iN <= 2)
SY = 10;
Else
SY = Sqrt(Sum9/(iN-2));
//UpperBrand = OlsValue + TA*SY*Sum8;
//LowerBrand = OlsValue - TA*SY*Sum8;
UpperBrand = OlsValue + TA*SY*Sum8*0.6;
LowerBrand = OlsValue - TA*SY*Sum8*0.6;
PlotNumeric("上轨:", UpperBrand, 0, Red);
PlotNumeric("下轨:", LowerBrand, 0, Green);
// ------------------ 判定拟合系数 ------------------
For i = 0 to iN-1
{
Sum10 = Sum10 + OlsValue[i];
}
YA = Sum10/n;
//FileAppend("F:\\OLS"+"-"+Symbol+".txt", Text(date)+" "+Text(time));
For i = 0 to iN-1
{
Yi = B0 + B1*i;
Sum11 = Sum11 + Sqr(Yi - YA);
}
For i = 0 to iN-1
{
Sum12 = Sum12 + Sqr(Close[i] - YA);
}
R = Sum11/Sum12;
//FileAppend("F:\\OLS"+"-"+Symbol+".txt", "R = "+Text(R));
End
//------------------------------------------------------------------------
// 编译版本 GS2010.12.08
// 用户版本 2011/06/24 15:52
// 更改声明《TB小扬QQ群:105942785》保留对TradeBlazer平台
//每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------ |
|