#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_color2 White
#property indicator_color3 Yellow
#property indicator_color4 White
//---- input parameters
extern int 均线周期1 = 8;
extern int 均线周期2 = 13;
extern int 类型1 = 1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern int 类型2 = 1; //类型: 0-SMA; 1-EMA; 2-SMMA; 3-LWMA
extern string 类型说明 = "0-SMA; 1-EMA; 2-SMMA; 3-LWMA";
extern int 文字水平 = 0;
extern int 文字垂直 = 0;
extern int 文字大小 = 9;
extern string 文字标识 = "1";
extern color 文字颜色 = Aqua;
extern int 是否报警 = 1;
extern int 报警间隔多少秒 = 60;
extern int 报警多少次数停止 = 5;
extern int 是否发邮件 = 0;
//---- buffers
double Ma10[];
double Ma130[];
double Up[];
double Down[];
int TimeInMinute;
int FlagAlert = 0;
int alertnum = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(4);
SetIndexStyle(0, DRAW_LINE);
SetIndexStyle(1, DRAW_LINE);
SetIndexStyle(2, DRAW_ARROW);
SetIndexStyle(3, DRAW_ARROW);
SetIndexBuffer(0, Ma10);
SetIndexBuffer(1, Ma130);
SetIndexBuffer(2, Up);
SetIndexBuffer(3, Down);
SetIndexArrow(2, 233);
SetIndexArrow(3, 234);
TimeInMinute = 0;
//----
return (0);
}
int start()
{
int i;
int limit;
string Signal;
int counted_bars = IndicatorCounted();
//---- check for possible errors
if (counted_bars < 0)
return (-1);
//---- the last counted bar will be recounted
if (counted_bars > 0)
counted_bars--;
limit = Bars - counted_bars;
for (i = limit - 1; i >= 0; i--)
{
Ma10[i] = iMA(NULL, 0, 均线周期1, 0, 类型1, PRICE_CLOSE, i);
Ma130[i] = iMA(NULL, 0, 均线周期2, 0, 类型2, PRICE_CLOSE, i);
if ((Ma10[i + 1] < Ma130[i + 1]) && (Ma10[i] > Ma130[i]) && (Close[i] > Ma10[i]) && (Close[i] > Ma130[i]))
{
Signal = "[" + Period() + "分钟]" + TimeHour(Time[i] + TimeInMinute) + "点" + TimeMinute(Time[i] + TimeInMinute) + "分 " + Symbol() + "在价格" + DoubleToStr(Close[i], 4) + "发生" + "金叉";
writetext(文字标识, Signal, 5 + 文字水平, 25 + 文字垂直, 文字颜色, 文字大小);
Up[i] = Low[i] - 3 * Point;
if (i == 0)
{
if (FlagAlert == 0)
{
if (是否报警 == 1 && alertnum < 报警多少次数停止)
{
if (MathMod(TimeCurrent(), 60) == 0)
{
Alert(Signal);
alertnum++;
}
}
if (是否发邮件 == 1)
SendMail(Signal, Signal);
FlagAlert = 1;
}
}
}
if ((Ma10[i + 1] > Ma130[i + 1]) && (Ma10[i] < Ma130[i]) && (Close[i] < Ma10[i]) && (Close[i] < Ma130[i]))
{
Signal = "[" + Period() + "分钟]" + TimeMonth(Time[i] + TimeInMinute) + "点" + TimeMinute(Time[i] + TimeInMinute) + "分 " + Symbol() + "在价格" + DoubleToStr(Close[i], 4) + "发生" + "死叉";
writetext(文字标识, Signal, 5 + 文字水平, 25 + 文字垂直, 文字颜色, 文字大小);
Down[i] = High[i] + 3 * Point;
if (i == 1)
{
if (FlagAlert == 0)
{
if (是否报警 == 1 && alertnum < 报警多少次数停止)
{
if (MathMod(TimeCurrent(), 60) == 0)
{
Alert(Signal);
alertnum++;
}
}
if (是否发邮件 == 1)
SendMail(Signal, Signal);
FlagAlert = 1;
}
}
}
else
{
FlagAlert = 0;
alertnum == 0;
}
}
return (0);
}
void writetext(string Labelname, string data, int x, int y, color ColorValue, int FontSize) //通过Object写文字
{
ObjectDelete(Labelname);
ObjectCreate(Labelname, OBJ_LABEL, 0, 0, 0);
ObjectSetText(Labelname, data, FontSize, "Arial", ColorValue);
ObjectSet(Labelname, OBJPROP_CORNER, 0);
ObjectSet(Labelname, OBJPROP_XDISTANCE, x);
ObjectSet(Labelname, OBJPROP_YDISTANCE, y);
}