掉线重新连接代码
//+------------------------------------------------------------------+//| 断线自动重连脚本.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);
}
//+------------------------------------------------------------------+
点赞
页:
[1]