mql金叉死叉报警

 

#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);
}

Moving Average (详解MT4自带的EA) (2011-11-16 09:34:14) 转载▼ 标签: 杂谈 MT4自带的EA :Moving Average 详解 //+------------------------------------------------------------------+ //| Moving Average.mq4 | //| Copyright ?2005, MetaQuotes Software Corp. | //| | //+------------------------------------------------------------------+ #define MAGICMA 20050610 //定义本EA操作的订单的唯一标识号码,由此可以实现在同一账户上多系统操作,各操作EA的订单标识码不同,就不会互相误操作。凡是EA皆不可缺少,非常非常重要!!! extern double Lots = 0.1;//每单的交易量 extern double MaximumRisk = 0.02;//本系统最大可以动用总资金的2% extern double DecreaseFactor = 3;//作者定义的参数,作用要看程序中的用法 extern double MovingPeriod = 10;//EA中使用的均线的周期 extern double MovingShift =3;//EA中使用的均线向左的K线偏移量 //extern 确定从外部程序输入的变量, 会直接显现输入数据窗口。数列本身不能作为外部变量。 //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol)//函数作用,计算当前持仓订单的数量 { int buys=0,sells=0;//定义两个临时变量,准备用于后面的多空订单的个数计算 //---- for(int i=0;i0) return(buys); else return(-sells);//本函数返回查询计算结束时的持仓单的个数.这种模式返回是假设不存在锁单的。 } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized()//函数目的,根据要求 计算出订单交易量 {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值