您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

共享一个V5版用AUTOIT监控TB是否死机并自动重开.(欢迎纠错) [开拓者 TB]

  • 咨询内容: 本帖最后由 hal5667 于 2015-3-16 13:30 编辑

    首先,写一个TB公式,上两个超级图表,10秒周期的,挂上公式.每10秒写一个开盘价进文件里面.需要用两个品种,AG和IF,因为时间跨度不一样..
    下例写进:"D:\\openjiankong.log"


    本来想写:三次出错发邮件请求人工处理。但不知道怎么样写,欢迎高手补充。我是个菜鸟,下列代码都是东拼西凑的,测试了2天,并模拟死机了N次,貌似还能用。(3月16修改过)
    Vars
            NumericSeries LastBarTime;

    Begin
       LastBarTime = GetGlobalVar(10);
            If(BarStatus==2 && LastBarTime != Time)
            {
                    LastBarTime = Time;
                                                    FileAppend("D:\\openjiankong.log",Text(open));
                    }
       SetGlobalVar(10,LastBarTime);

    End

    然后下列是我自己编的东东,可能还有些纰漏,欢迎纠正。因为TB经常跳出一些乱七八糟的东西。
    大概思路是:监控D:\\openjiankong.log的更新时间,如果和系统时间相差如果超过60秒,说明这个TB有可能死掉了,断线了。杀进程,重启。


    #Region ;**** 参数创建于 ACNWrapper_GUI ****
    #PRE_icon=C:\Windows\syswow64\SHELL32.dll|-239
    #PRE_Res_requestedExecutionLevel=None
    #EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
    ;注意,一定要把AutoIt脚本文件放在TB安装目录下,与TB执行程序TradeBlazer.exe放同一目录
    #Include <date.au3>
    #include <File.au3>

    Dim $tbtime,$truetime,$cha,$systime,$mmm
    $path="E:\tbv5019_portable\"&"\" ;用你的TB路径替换
    $TBloginname="*******"        ;用你的TB登陆账号替换***
    $TBloginpassword="*******"    ;用你的TB登陆密码替换***
    $MAINWINDOWS = "交易开拓者平台(旗舰版)"

    While 1>0
            $truetime=@MDAY*1000000+@HOUR*3600+@MIN*60+@SEC
        $systime=@HOUR*10000+@MIN*100+@SEC
       Local $t = FileGetTime("D:\\openjiankong.log", 0)
        $tbtime= $t[2]*1000000+$t[3]*3600+$t[4]*60+$t[5]
            $cha=$truetime-$tbtime
           
            If @HOUR=9 And @MIN=0 And @SEC=0 Then
       $mmm=0
       EndIf;9点错误次数清0
       
       
    If( ( @HOUR=9 And @min>0 )or @HOUR=10 Or (@HOUR=13 And @MIN>0) Or @HOUR=14  Or (@HOUR=21 And @min>0)  Or @HOUR=22  Or @HOUR=23  Or  ( @HOUR=11 And @min<29 ))  And @SEC>2 AND  _DateToDayOfWeek(@YEAR, @MON, @MDAY)<>1   AND _DateToDayOfWeek(@YEAR, @MON, @MDAY)<>7   Then
              If WinExists("Microsoft Visual C++ Runtime Library") Then
            WinActivate("Microsoft Visual C++ Runtime Library")
               Sleep(1000)
            WinClose("Microsoft Visual C++ Runtime Library")
            Sleep(1000)
                EndIf
                   
           If WinExists("TBDataCenter Microsoft 基础类应用程序") Then
               WinActivate("TBDataCenter Microsoft 基础类应用程序")
                    Sleep(1000)
               WinClose("TBDataCenter Microsoft 基础类应用程序")
               Sleep(1000)
                       EndIf                 

            If WinExists("交易开拓者错误报告发送") Then
            WinActivate("交易开拓者错误报告发送")
                    Sleep(1000)
            WinClose("交易开拓者错误报告发送")
            Sleep(1000)
                EndIf

    If $cha>60 And $mmm<4 Then
                     $mmm=$mmm+1;计算错误次数               
                     $msg="服务器出现异常"&$mmm&"次!";只重启3次,多于3次就人工处理。

            _FileCreate("D:\msgpush\income\error\1.log")
                _FileWriteLog("D:\msgpush\income\error\1.log", $msg);我写了另外的监控这个文件,出错过多就报警。
                      
             If WinExists("TBDataCenter Microsoft 基础类应用程序") Then
               WinActivate("TBDataCenter Microsoft 基础类应用程序")
                    Sleep(1000)
               WinClose("TBDataCenter Microsoft 基础类应用程序")
               Sleep(1000)
                       EndIf          
                      
                              If WinExists($MAINWINDOWS) Then
                                    WinActivate($MAINWINDOWS);切换到主窗口
                                    Sleep(1000)
                                    WinClose($MAINWINDOWS, "")
                                    ControlClick("确认","","Button1");将当前焦点定位到确认键
                                    Sleep(1000)
                            EndIf
                                 Sleep(1000)
                 If ProcessExists("TradeBlazer.exe") And WinExists("交易开拓者平台(旗舰版) - ") = 0 Then
                ProcessClose("TradeBlazer.exe")
                    ProcessClose("TBDataCenter.exe")
                  EndIf
                   
                    Sleep(2000)
                     If WinExists("Microsoft Visual C++ Runtime Library") Then
            WinActivate("Microsoft Visual C++ Runtime Library")
               Sleep(1000)
            WinClose("Microsoft Visual C++ Runtime Library")
            Sleep(1000)
                EndIf
                   
           If WinExists("TBDataCenter Microsoft 基础类应用程序") Then
               WinActivate("TBDataCenter Microsoft 基础类应用程序")
                    Sleep(1000)
               WinClose("TBDataCenter Microsoft 基础类应用程序")
               Sleep(1000)
                       EndIf                 

            If WinExists("交易开拓者错误报告发送") Then
            WinActivate("交易开拓者错误报告发送")
                    Sleep(1000)
            WinClose("交易开拓者错误报告发送")
            Sleep(1000)
                EndIf
           
                    ;如果当前时间没有进程,重启进程
              If WinExists("交易开拓者平台(旗舰版) - ") = 0 Then
                      
                    If ProcessExists("TradeBlazer.exe") And WinExists("交易开拓者平台(旗舰版) - ") = 0 Then
               ProcessClose("TradeBlazer.exe")
               ProcessClose("TBDataCenter.exe")
                        Sleep(1000)
                        EndIf
            If ProcessExists("TBDataCenter.exe") Then
                   ProcessClose("TBDataCenter.exe")
                    Sleep(1000)
                          EndIf
                      
        $result=0   
        Run("E:\tbv5019_portable\TradeBlazer.exe",$path) ;用你的TB路径替换
        Local $TB_Login_Windows = "[CLASS:#32770]"
        WinActivate($TB_Login_Windows, "")
         ;ControlClick($TB_Login_Windows, "","Button6");TBV5脱机登陆测试
           ; MouseClick("left", 500, 500, 2)
       

    ControlClick($TB_Login_Windows, "","Button5");TBV5登陆
            Sleep(2000)

    ControlSetText($TB_Login_Windows, "","Edit1",$TBloginname)
            Sleep(300)

    ControlSetText($TB_Login_Windows, "","Edit2",$TBloginpassword)
            Sleep(300)
                   
                   
    ControlClick($TB_Login_Windows, "","Button1");TBV5登陆

            If WinExists("欢迎登录交易开拓者平台(旗舰版)","用户密码错误") Then
                    WinClose("欢迎登录交易开拓者")
                    $result = -1
            EndIf
        If $result = -1 Then
                    MsgBox(4096, "登录错误提示", "TB登录密码错误", 10)
                    ContinueLoop
            EndIf
        WinWaitActive("交易开拓者平台(旗舰版) - ","",30)
        Sleep(5000)
        WinActivate("交易开拓者平台(旗舰版) - ")
        If WinExists("系统消息") Then
            WinActivate("系统消息")
                    Sleep(1000)
            WinClose("系统消息")
            Sleep(1000)
        EndIf
         Sleep (10000)
             WinMenuSelectItem("交易开拓者平台(旗舰版) - ","","交易(&T)", "交易帐户登录");登录帐户
             
        ControlFocus("帐户登录","","Button1")
              Sleep(1000)
            ControlClick("帐户登录","","Button1")
        Sleep(25000) ;等15秒,开始自动交易
            WinActivate("交易开拓者平台(旗舰版) - ")
          WinMenuSelectItem("交易开拓者平台(旗舰版) - ","","文件(&F)", "启动所有自动交易")
        Sleep(2000)
          
       EndIf
       EndIf;如果时间差大于60,并且进程存在,杀进程
              
                           
            EndIf  

                      Sleep(10)
              WEnd
              
    Sleep(2000)


    注:TB系统设置-重启TB后打开最后保存的所有工作区。

     

  • TB技术人员: 三次出错发邮件,可以做一个变量,初始值为0,出错一次就加1,等于3的时候,发邮件,发完邮件,重置这个变量为0。

    你那个代码中间发送那么多TAB键,只是要选中那个暂停自动登陆吗,其实要一直暂停自动登陆,在TB的config.env文件里修改就可以了,改成如下图

    2222.png (9.13 KB, 下载次数: 3) 2015-3-15 10:14:13 上传 下载次数: 3

    这样比发送模拟按键还稳定得多了。

     

  • TB客服: 这个帖要顶。

     

  • 网友回复: 本帖最后由 hal5667 于 2015-3-16 13:43 编辑
    superwin 发表于 2015-3-15 10:16
    三次出错发邮件,可以做一个变量,初始值为0,出错一次就加1,等于3的时候,发邮件,发完邮件,重置这个变 ...


    原来如此。一直都不知道这回事,谢谢解决了我的一大问题。

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容