我自学编程一段时间了 一些简单的指标 都能看懂 而且会编一些简单的工具。 但是菜鸟碰到老鸟写的指标就一头雾水了。希望高手给这个指标做一些注解。这个指标代码比较复杂。
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Fuchsia
#property indicator_color2 Fuchsia
#property indicator_color3 Fuchsia
#property indicator_color4 Fuchsia
#property indicator_color5 Fuchsia
#property indicator_color6 Fuchsia
#property indicator_color7 Fuchsia
#property indicator_color8 Fuchsia
extern int FindLen = 100;
extern int RSIPeriod = 14;
extern int ibars=1000;
extern bool AlertFlag = TRUE;
double G_ibuf_84[];
double G_ibuf_88[];
double G_ibuf_92[];
double G_ibuf_96[];
double G_ibuf_100[];
double G_ibuf_104[];
double G_ibuf_108[];
double G_ibuf_112[];
int Gia_116[];
int Gi_120 = 0;
int Gia_124[];
int Gi_128 = 0;
int Gia_132[];
int Gia_136[];
int Gi_140 = 0;
int Gia_144[];
int Gia_148[];
int Gi_152 = 0;
int ii = 0;
int iii = 0;
int init()
{
IndicatorBuffers(8);
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, G_ibuf_84);
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, G_ibuf_88);
SetIndexStyle(2, DRAW_LINE);
SetIndexBuffer(2, G_ibuf_92);
SetIndexStyle(3, DRAW_LINE);
SetIndexBuffer(3, G_ibuf_96);
SetIndexStyle(4, DRAW_LINE);
SetIndexBuffer(4, G_ibuf_100);
SetIndexStyle(5, DRAW_LINE);
SetIndexBuffer(5, G_ibuf_104);
SetIndexStyle(6, DRAW_ARROW);
SetIndexBuffer(6, G_ibuf_108);
SetIndexArrow(6, 218);
SetIndexStyle(7, DRAW_ARROW);
SetIndexBuffer(7, G_ibuf_112);
SetIndexArrow(7, 217);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexEmptyValue(2, 0.0);
SetIndexEmptyValue(3, 0.0);
SetIndexEmptyValue(4, 0.0);
SetIndexEmptyValue(5, 0.0);
SetIndexEmptyValue(6, 0.0);
SetIndexEmptyValue(7, 0.0);
return (0);
}
int start()
{
int Li_4;
int Li_8;
int Li_12;
double Ld_20;
CalculateData();
ArrayInitialize(G_ibuf_84, 0.0);
ArrayInitialize(G_ibuf_88, 0.0);
ArrayInitialize(G_ibuf_92, 0.0);
ArrayInitialize(G_ibuf_96, 0.0);
ArrayInitialize(G_ibuf_100, 0.0);
ArrayInitialize(G_ibuf_104, 0.0);
ArrayInitialize(G_ibuf_108, 0.0);
ArrayInitialize(G_ibuf_112, 0.0);
for (int index_0 = 0; index_0 = Li_8; Li_16--)
{
if (Li_12 == 1 && G_ibuf_84[Li_16] != 0.0) Li_12 = 2;
if (Li_12 == 2 && G_ibuf_88[Li_16] != 0.0) Li_12 = 3;
if (Li_12 == 3 && G_ibuf_92[Li_16] != 0.0) Li_12 = 4;
if (Li_12 == 4 && G_ibuf_96[Li_16] != 0.0) Li_12 = 5;
if (Li_12 == 5 && G_ibuf_100[Li_16] != 0.0) Li_12 = 6;
if (Li_12 == 6 && G_ibuf_104[Li_16] != 0.0) Li_12 = -1;
}
Ld_20 = (High[Li_8] - High[Li_4]) / (Li_4 - Li_8);
switch (Li_12)
{
case 1:
for (Li_16 = Li_4; Li_16 >= Li_8; Li_16--)
G_ibuf_84[Li_16] = High[Li_4] + (Li_4 - Li_16) * Ld_20;
break;
case 2:
for (Li_16 = Li_4; Li_16 >= Li_8; Li_16--)
G_ibuf_88[Li_16] = High[Li_4] + (Li_4 - Li_16) * Ld_20;
break;
case 3:
for (Li_16 = Li_4; Li_16 >= Li_8; Li_16--)
G_ibuf_92[Li_16] = High[Li_4] + (Li_4 - Li_16) * Ld_20;
break;
case 4:
for (Li_16 = Li_4; Li_16 >= Li_8; Li_16--)
G_ibuf_96[Li_16] = High[Li_4] + (Li_4 - Li_16) * Ld_20;
break;
case 5:
for (Li_16 = Li_4; Li_16 >= Li_8; Li_16--)
G_ibuf_100[Li_16] = High[Li_4] + (Li_4 - Li_16) * Ld_20;
break;
case 6:
for (Li_16 = Li_4; Li_16 >= Li_8; Li_16--)
G_ibuf_104[Li_16] = High[Li_4] + (Li_4 - Li_16) * Ld_20;
}
G_ibuf_108[Li_8] = High[Li_8];
if (AlertFlag)
{
if(Li_16 == 0 && ii == FALSE)
{
Alert(Symbol() + " " + Period() + " RSI背离" "!" );
ii = TRUE;
iii = FALSE;
}
}
}
for (index_0 = 0; index_0 = Li_8; Li_16--)
{
if (Li_12 == 1 && G_ibuf_84[Li_16] != 0.0) Li_12 = 2;
if (Li_12 == 2 && G_ibuf_88[Li_16] != 0.0) Li_12 = 3;
if (Li_12 == 3 && G_ibuf_92[Li_16] != 0.0) Li_12 = 4;
if (Li_12 == 4 && G_ibuf_96[Li_16] != 0.0) Li_12 = 5;
if (Li_12 == 5 && G_ibuf_100[Li_16] != 0.0) Li_12 = 6;
if (Li_12 == 6 && G_ibuf_104[Li_16] != 0.0) Li_12 = -1;
}
Ld_20 = (Low[Li_8] - Low[Li_4]) / (Li_4 - Li_8);
switch (Li_12)
{
case 1:
for (Li_16 = Li_4; Li_16 >= Li_8; Li_16--)
G_ibuf_84[Li_16] = Low[Li_4] + (Li_4 - Li_16) * Ld_20;
break;
case 2:
for (Li_16 = Li_4; Li_16 >= Li_8; Li_16--)
G_ibuf_88[Li_16] = Low[Li_4] + (Li_4 - Li_16) * Ld_20;
break;
case 3:
for (Li_16 = Li_4; Li_16 >= Li_8; Li_16--)
G_ibuf_92[Li_16] = Low[Li_4] + (Li_4 - Li_16) * Ld_20;
break;
case 4:
for (Li_16 = Li_4; Li_16 >= Li_8; Li_16--)
G_ibuf_96[Li_16] = Low[Li_4] + (Li_4 - Li_16) * Ld_20;
break;
case 5:
for (Li_16 = Li_4; Li_16 >= Li_8; Li_16--)
G_ibuf_100[Li_16] = Low[Li_4] + (Li_4 - Li_16) * Ld_20;
break;
case 6:
for (Li_16 = Li_4; Li_16 >= Li_8; Li_16--)
G_ibuf_104[Li_16] = Low[Li_4] + (Li_4 - Li_16) * Ld_20;
}
G_ibuf_112[Li_8] = Low[Li_8];
if (AlertFlag)
{
if(Li_16== 0 && iii == FALSE)
{
Alert(Symbol() + " " + Period() + " RSI背离" "!" );
iii = TRUE;
ii = FALSE;
}
}
}
return (0);
}
void CalculateData()
{
int count_4;
int Lia_20[10];
int Lia_24[10];
bool Li_28;
double Ld_32;
double Ld_40;
double Ld_48;
// int Li_16 = 2;
bool Li_56 = FALSE;
Gi_120 = 0;
Gi_128 = 0;
Gi_140 = 0;
Gi_152 = 0;
for (int Li_0 = ibars- 1; Li_0 >= -1; Li_0--)
{
Ld_40 = (iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, Li_0) - 50.0) / 100.0;
if (Ld_32 * Ld_40 = 2 * 2 + 1 || Li_0 == -1) Li_56 = TRUE;
if (Li_56 == TRUE)
{
if (Ld_32 > 0.0)
{
for (int Li_8 = Li_0 + count_4 + 1; Li_8 > Li_0; Li_8--)
{
for (int Li_12 = 0; Li_12 = Li_8 - 2; Li_12--)
if (Ld_48 Li_0; Li_8--)
{
for (Li_12 = 0; Li_12 = (iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, Li_12) - 50.0) / 100.0)
Lia_20[Li_12 - Li_8 - 1] = 0;
for (Li_12 = Li_8 - 1; Li_12 >= Li_8 - 2; Li_12--)
if (Ld_48 >= (iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, Li_12) - 50.0) / 100.0)
Lia_24[StrToInteger(DoubleToStr(MathAbs(Li_12 - Li_8 + 1), 0))] = 0;
for (Li_12 = 0; Li_12 High[Li_16] && (iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, Li_20) - 50.0) / 100.0 = Li_20 + 1; Li_12--)
{
Ld_32 = (iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, Li_16) - 50.0) / 100.0 + (Li_16 - Li_12) * Ld_24;
if (Ld_32 + 0.018 (iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, Li_16) - 50.0) / 100.0)
{
Ld_24 = ((iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, Li_20) - 50.0) / 100.0 - (iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, Li_16) - 50.0) / 100.0) / (Li_16 - Li_20);
Ld_40 = 1;
for (Li_12 = Li_16 - 1; Li_12 >= Li_20 + 1; Li_12--)
{
Ld_32 = (iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, Li_16) - 50.0) / 100.0 + (Li_16 - Li_12) * Ld_24;
if (Ld_32 - 0.018 > (iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, Li_12) - 50.0) / 100.0) Ld_40 = 0;
}
if (Ld_40 == 1.0)
{
Gi_152++;
ArrayResize(Gia_144, Gi_152);
ArrayResize(Gia_148, Gi_152);
Gia_144[Gi_152 - 1] = Li_16;
Gia_148[Gi_152 - 1] = Li_20;
}
}
}
}
}
|