老六 发表于 2018-7-8 20:02:35

掉线重新连接代码

//+------------------------------------------------------------------+
//|                                             断线自动重连脚本.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);
}
//+------------------------------------------------------------------+

xianhuoba 发表于 2018-9-20 10:00:19

点赞
页: [1]
查看完整版本: 掉线重新连接代码