显示星星指标,代码大概是计算过去9根K线的基准价格,幅度,判定上涨或下跌。
#property description "小圆点"
#property link "http://ea.kitgain.com/"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Red
extern int NumBars = 499;
extern int EnableAlerts = 1;
extern int SignalID = 0;
double up[];
double down[];
double spread;
int 已报警 = 0;
int init()
{
SetIndexStyle(0, DRAW_ARROW);
SetIndexBuffer(0, up);
SetIndexArrow(0, 159);
SetIndexEmptyValue(0, 0.0);
SetIndexStyle(1, DRAW_ARROW);
SetIndexBuffer(1, down);
SetIndexArrow(1, 159);
SetIndexEmptyValue(1, 0.0);
spread = MarketInfo(Symbol(), MODE_SPREAD) * Point;
SetIndexDrawBegin(0, 0);
return (0);
}
int deinit() {return (0);}
int start()
{
double v[100];
int 九 = 9;
double 系数 = 9.0;
double 倍 = 1.1;
int 回算柱数 = 0;
int i = 0;
bool 涨 = TRUE;
double 基准价 = 0;
double Range = 0;
double 大 = 0;
int k = 0;
double sum = 0;
int j = 0;
double 权 = 0;
double Ld_96 = 0;
int 符号已显示 = 0;
int g = 0;
double atr = 0;
double 箭头间距 = 5;
double Ld_136 = 0;
double Ld_144 = 0;
if (Bars < NumBars) 回算柱数 = Bars;
else 回算柱数 = NumBars;
if (Close[回算柱数 - 2] > Close[回算柱数 - 1]) 涨 = TRUE;
else 涨 = FALSE;
基准价 = Close[回算柱数 - 2];
for (i = 回算柱数 - 3; i >= 0; i--)
{
大 = spread + High[i] - Low[i];
if (MathAbs(spread + High[i] - (Close[i + 1])) > 大)
大 = MathAbs(spread + High[i] - (Close[i + 1]));
if (MathAbs(Low[i] - (Close[i + 1])) > 大)
大 = MathAbs(Low[i] - (Close[i + 1]));
//----------------------------------------------
if (i == 回算柱数 - 3) //应该是不会执行
for (j = 0; i <= 九 - 1; j++) //如果是新打开MT4,最近九柱赋予初值
v[j] = 大;
//----------------------------------------------
v[k] = 大;//v[0]
sum = 0;
权 = 九;//9
g = k;//0
for (j = 0; j <= 九 - 1; j++) //九次
{
sum += v[g] * 权;//v[0]*9+v[8]*8+v[7]*7...v[1]*1
权 -= 1.0;//9 8..1
g--;//0 8 7..1
if (g == -1) g = 九 - 1;//8
}
sum = 2.0 * sum / (系数 * (系数 + 1.0));// * 2/9*10
//v[0]*18/90+v[8]*16/90+v[7]*14/90..v[1]2/90
//18+16..2等差数列的和为90
k++;
if (k == 九) k = 0;
Range = 倍 * sum;
if (涨 && Low[i] < 基准价 - Range)
{
涨 = FALSE;
基准价 = spread + High[i];
}
if (!涨 && spread + High[i] > 基准价 + Range)
{
涨 = TRUE;
基准价 = Low[i];
}
if (涨 && Low[i] > 基准价) 基准价 = Low[i];
if (!涨 && spread + High[i] < 基准价) 基准价 = spread + High[i];
atr = iATR(NULL, 0, 10, i);
Ld_136 = 0;
Ld_144 = 0;
if (涨)
{
if (符号已显示 != 1) Ld_96 = Low[i] - atr * 箭头间距 / 5.6;
if (符号已显示 == 1) Ld_96 = -1.0;
if (Ld_96 > 0.0)
{
Ld_136 = Ld_96;
Ld_144 = 0;
}
else
{
Ld_136 = 0;
Ld_144 = 0;
}
up[i] = Ld_136;
符号已显示 = 1;
}
else
{
if (符号已显示 != 2) Ld_96 = spread + High[i] + atr * 箭头间距 / 5.6;
if (符号已显示 == 2) Ld_96 = -1.0;
if (Ld_96 > 0.0)
{
Ld_136 = 0;
Ld_144 = Ld_96;
}
else
{
Ld_136 = 0;
Ld_144 = 0;
}
down[i] = Ld_144;
符号已显示 = 2;
}
}
if (EnableAlerts == 1)
{
if (Ld_136 > 0.0 && 已报警 != 1)
{
已报警 = 1;
Alert(Symbol(), " ", Period(), " Alert!! ", "BUY SIGNAL");
}
if (Ld_144 > 0.0 && 已报警 != 2)
{
已报警 = 2;
Alert(Symbol(), " ", Period(), " Alert!! ", "SELL SIGNAL");
}
}
return (0);
}
特点是:
- 权重系数从20%(18/90)等差递减到2/90,之和就是90,不错。
- 最近一柱是20%,但倒数第二柱不是16/90,而是2/90;而倒数第八柱是16/90,这符合之前的研究,最近一柱并不是跟上一柱呈现正相关性,反而呈现负相关性。
- 一个延伸判断准则是,如果红蓝点靠的太近,一般不会是大波段的起点。

发表评论