- //+------------------------------------------------------------------+
  - //|                                             断线自动重连脚本.mq4 |
  - //|                                                            "ldj" |
  - //|                                           "http://www.fxvip.net" |
  - //+------------------------------------------------------------------+
  - //scripts//脚本文件
  - #property copyright "ldj"
  - #property link      "http://www.fxvip.net"
  - #property show_inputs
  - //自动登录准备
  - //把要登录的账号添加到收藏夹,并保证列在第一位。 
  - extern string 邮件标记字符串="EA";
  - extern string 所有参数单位为秒="以下参数均折算为妙";
  - extern int 时差=18000; //本地时间与服务器时间的时间差,本地时间迟于服务器时间其值为负。单位秒。
  - extern int 允许时差=120;//允许服务器行情报价停滞的时间,建议设置2分钟即120秒。
  - extern int 检测间隔=20;//单位秒,不应小于20秒。
  - extern bool 邮件报警=false;
  - extern bool 声音报警=false;
  - //0、不自动登录。1、重新扫描服务器。2、重新登录第一个服务器。3、登录收藏夹第一个账号4、登录导航窗第一个账号
  - extern int 重连方式=1;
  
 - int ServerNum=0;
  
 - #include <WinUser32.mqh>
  - #import "user32.dll"
  -   int GetParent( int hWnd );
  -   int GetDlgItem( int hDlg, int nIDDlgItem );
  -   int GetLastActivePopup( int hWnd );
  -   int GetAncestor(int hWnd,int gaFlags);//GetAncestor(HWND hwnd,UINT gaFlags);
  - #import
  
 - #define VK_HOME 0x24
  - #define VK_DOWN 0x28
  - #define VK_ENTER 0x0D
  
 - #define PAUSE 1000
  - int LoginSleep=120; //不小于2分钟,避免频繁发送登录请求
  - int MailSleep=120;  //不小于2分钟,避免频繁发送邮件
  - datetime LoginTime,MailTime;
  
 - //+------------------------------------------------------------------+
  - //| script program init function                                     |
  - //+------------------------------------------------------------------+
  - void init()
  - {
  -       LoginTime=TimeLocal();
  -       MailTime=TimeLocal();
  -       if(检测间隔<10)检测间隔=10; //避免频繁检测系统资源消耗过多!
  -       return;
  - }
  - //+------------------------------------------------------------------+
  - //| script program start function                                    |
  - //+------------------------------------------------------------------+
  - void start()
  - {
  -         if ( !IsDllsAllowed() )
  -         {
  -                 alert( "禁止调用DLL文件" );
  -                 return;
  -         }
  
 -    string 正文;
  -    double T;
  -    int week;
  -    
  -    while(IsStopped()==false)//如果没有接到脚本终止命令则一直运行
  -    {
  -      正文="服务器时间:"+TimeToStr(TimeCurrent())+"n本地的时间:"+TimeToStr(TimeLocal())+"n"+AccountCompany()+"平台"+"账号为:"+AccountNumber()+"的账户";
  -      
  -      T=(TimeLocal()-TimeCurrent())/360.0;
  -      Comment("服务器时间:",TimeToStr(TimeCurrent(),TIME_SECONDS),
  -              "n本地的时间:",TimeToStr(TimeLocal(),TIME_SECONDS),
  -              "n参考时差值:",MathRound(T)*360);
  -      week=TimeDayOfWeek(TimeLocal()-时差);
  -      if(week>=1 && week<=5)//服务器时间为 星期一  至  星期五,有星期天或星期六 K线的平台可适当修改。
  -      {
  -        if ((TimeLocal()-TimeCurrent()-时差)>允许时差)
  -        {
  -          if (LoginTime+LoginSleep<TimeLocal())
  -          {
  -            LoginTime=TimeLocal();
  -            switch(重连方式)
  -            {
  -              case 0 : break;
  -              case 1 : ReConnecter();break;
  -              case 2 : ReConnecterN(ServerNum);break;
  -              case 3 : ReLogin(1);break;
  -              case 4 : ReLogin2();break;
  -              default : break;
  -            }
  -          }
  -          //正文=AccountCompany()+"平台"+"账号为:"+AccountNumber()+"的账户";
  -          if (声音报警==true) alert("从服务器上获取行情数据超时");
  -          if (邮件报警==true && MailTime+MailSleep<TimeLocal())
  -          { 
  -            SendMail("从服务器上获取行情数据超时",正文+"n从服务器上获取行情数据超时及时处理n"+邮件标记字符串);
  -            MailTime=TimeLocal();
  -          }
  -          Sleep(检测间隔*1000);
  -        }
  -      }
  -      if(IsConnected()==false)
  -      {
  -        if (LoginTime+LoginSleep<TimeLocal())
  -        {
  -           LoginTime=TimeLocal();
  -           switch(重连方式)
  -           {
  -             case 0 : break;
  -             case 1 : ReConnecter();break;
  -             case 2 : ReConnecterN(ServerNum);break;
  -             case 3 : ReLogin(1);break;
  -             case 4 : ReLogin2();break;
  -             default : break;
  -           }
  -        }
  -        //正文=AccountCompany()+"平台"+"账号为:"+AccountNumber()+"的账户";
  -        if (声音报警==true) alert("服务器断线");
  -        if (邮件报警==true && MailTime+MailSleep<TimeLocal()) 
  -        {
  -          SendMail("服务器连接中断",正文+"n与服务器连接中断请及时处理n"+邮件标记字符串);
  -          MailTime=TimeLocal();
  -        }
  -        Sleep(检测间隔*1000);
  -      }
  -      Sleep(1*1000);
  -    }
  -    Comment("");
  -    return(0);
  - }
  - //+------------------------------------------------------------------+
 
  |