请选择 进入手机版 | 继续访问电脑版
外汇ea之家
现在注册
已注册用户请  登录
外汇ea之家    mql4编程中文手册

掉线重新连接代码

  •   老六 · 2018-7-8 20:02:35 · 196 次点击 ·阅读模式     

    马上注册,结交更多好友,下载更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    1. //+------------------------------------------------------------------+
    2. //|                                             断线自动重连脚本.mq4 |
    3. //|                                                            "ldj" |
    4. //|                                           "http://www.fxvip.net" |
    5. //+------------------------------------------------------------------+
    6. //scripts//脚本文件
    7. #property copyright "ldj"
    8. #property link      "http://www.fxvip.net"
    9. #property show_inputs
    10. //自动登录准备
    11. //把要登录的账号添加到收藏夹,并保证列在第一位。
    12. extern string 邮件标记字符串="EA";
    13. extern string 所有参数单位为秒="以下参数均折算为妙";
    14. extern int 时差=18000; //本地时间与服务器时间的时间差,本地时间迟于服务器时间其值为负。单位秒。
    15. extern int 允许时差=120;//允许服务器行情报价停滞的时间,建议设置2分钟即120秒。
    16. extern int 检测间隔=20;//单位秒,不应小于20秒。
    17. extern bool 邮件报警=false;
    18. extern bool 声音报警=false;
    19. //0、不自动登录。1、重新扫描服务器。2、重新登录第一个服务器。3、登录收藏夹第一个账号4、登录导航窗第一个账号
    20. extern int 重连方式=1;

    21. int ServerNum=0;

    22. #include <WinUser32.mqh>
    23. #import "user32.dll"
    24.   int GetParent( int hWnd );
    25.   int GetDlgItem( int hDlg, int nIDDlgItem );
    26.   int GetLastActivePopup( int hWnd );
    27.   int GetAncestor(int hWnd,int gaFlags);//GetAncestor(HWND hwnd,UINT gaFlags);
    28. #import

    29. #define VK_HOME 0x24
    30. #define VK_DOWN 0x28
    31. #define VK_ENTER 0x0D

    32. #define PAUSE 1000
    33. int LoginSleep=120; //不小于2分钟,避免频繁发送登录请求
    34. int MailSleep=120;  //不小于2分钟,避免频繁发送邮件
    35. datetime LoginTime,MailTime;

    36. //+------------------------------------------------------------------+
    37. //| script program init function                                     |
    38. //+------------------------------------------------------------------+
    39. void init()
    40. {
    41.       LoginTime=TimeLocal();
    42.       MailTime=TimeLocal();
    43.       if(检测间隔<10)检测间隔=10; //避免频繁检测系统资源消耗过多!
    44.       return;
    45. }
    46. //+------------------------------------------------------------------+
    47. //| script program start function                                    |
    48. //+------------------------------------------------------------------+
    49. void start()
    50. {
    51.         if ( !IsDllsAllowed() )
    52.         {
    53.                 Alert( "禁止调用DLL文件" );
    54.                 return;
    55.         }

    56.    string 正文;
    57.    double T;
    58.    int week;
    59.    
    60.    while(IsStopped()==false)//如果没有接到脚本终止命令则一直运行
    61.    {
    62.      正文="服务器时间:"+TimeToStr(TimeCurrent())+"\n本地的时间:"+TimeToStr(TimeLocal())+"\n"+AccountCompany()+"平台"+"账号为:"+AccountNumber()+"的账户";
    63.      
    64.      T=(TimeLocal()-TimeCurrent())/360.0;
    65.      Comment("服务器时间:",TimeToStr(TimeCurrent(),TIME_SECONDS),
    66.              "\n本地的时间:",TimeToStr(TimeLocal(),TIME_SECONDS),
    67.              "\n参考时差值:",MathRound(T)*360);
    68.      week=TimeDayOfWeek(TimeLocal()-时差);
    69.      if(week>=1 && week<=5)//服务器时间为 星期一  至  星期五,有星期天或星期六 K线的平台可适当修改。
    70.      {
    71.        if ((TimeLocal()-TimeCurrent()-时差)>允许时差)
    72.        {
    73.          if (LoginTime+LoginSleep<TimeLocal())
    74.          {
    75.            LoginTime=TimeLocal();
    76.            switch(重连方式)
    77.            {
    78.              case 0 : break;
    79.              case 1 : ReConnecter();break;
    80.              case 2 : ReConnecterN(ServerNum);break;
    81.              case 3 : ReLogin(1);break;
    82.              case 4 : ReLogin2();break;
    83.              default : break;
    84.            }
    85.          }
    86.          //正文=AccountCompany()+"平台"+"账号为:"+AccountNumber()+"的账户";
    87.          if (声音报警==true) Alert("从服务器上获取行情数据超时");
    88.          if (邮件报警==true && MailTime+MailSleep<TimeLocal())
    89.          {
    90.            SendMail("从服务器上获取行情数据超时",正文+"\n从服务器上获取行情数据超时及时处理\n"+邮件标记字符串);
    91.            MailTime=TimeLocal();
    92.          }
    93.          Sleep(检测间隔*1000);
    94.        }
    95.      }
    96.      if(IsConnected()==false)
    97.      {
    98.        if (LoginTime+LoginSleep<TimeLocal())
    99.        {
    100.           LoginTime=TimeLocal();
    101.           switch(重连方式)
    102.           {
    103.             case 0 : break;
    104.             case 1 : ReConnecter();break;
    105.             case 2 : ReConnecterN(ServerNum);break;
    106.             case 3 : ReLogin(1);break;
    107.             case 4 : ReLogin2();break;
    108.             default : break;
    109.           }
    110.        }
    111.        //正文=AccountCompany()+"平台"+"账号为:"+AccountNumber()+"的账户";
    112.        if (声音报警==true) Alert("服务器断线");
    113.        if (邮件报警==true && MailTime+MailSleep<TimeLocal())
    114.        {
    115.          SendMail("服务器连接中断",正文+"\n与服务器连接中断请及时处理\n"+邮件标记字符串);
    116.          MailTime=TimeLocal();
    117.        }
    118.        Sleep(检测间隔*1000);
    119.      }
    120.      Sleep(1*1000);
    121.    }
    122.    Comment("");
    123.    return(0);
    124. }
    125. //+------------------------------------------------------------------+
    复制代码


    196 次点击  
    收藏  加入淘专辑0
      Reply  
    xianhuoba  2018-9-20 10:00:19 
    点赞
    添加一条新回复
    您需要登录后才可以回帖 登录 | 注册

    请勿自己恶意顶贴
    DigitalOcean  DigitalOcean
    关于我们   广告投放   我们的愿景   帮助中心   感谢   友站   外汇交易平台大全  
      最大的外汇智能交易社区!
    外汇交易有很大的风险性,本站所有资源均来自网络,请选择使用,如若出现亏损,本站不承担任何责任!
    快速回复 返回顶部 返回列表
    在线客服 意见反馈 常见问题 回到顶部