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