设为首页收藏本站

 找回密码
 注册
查看: 4965|回复: 5
打印 上一主题 下一主题

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

Rank: 4

精华
0
UID
3746
积分
518
帖子
118
主题
66
阅读权限
50
注册时间
2009-3-6
最后登录
2019-3-30
跳转到指定楼层
1#
发表于 2015-3-14 14:45:27 |只看该作者 |倒序浏览
本帖最后由 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后打开最后保存的所有工作区。

高级操盘手

「你若能信,在信之人,凡事皆能。」

Rank: 10Rank: 10Rank: 10

精华
0
UID
117005
积分
98549
帖子
1121
主题
14
阅读权限
200
注册时间
2013-3-18
最后登录
2022-10-29
2#
发表于 2015-3-15 10:16:04 |只看该作者
三次出错发邮件,可以做一个变量,初始值为0,出错一次就加1,等于3的时候,发邮件,发完邮件,重置这个变量为0。

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



这样比发送模拟按键还稳定得多了。
附件: 你需要登录才可以下载或查看附件。没有帐号?注册


不要因为众生的愚疑,而带来了自己的烦恼。

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
14994
积分
2352
帖子
449
主题
54
阅读权限
70
注册时间
2010-7-31
最后登录
2021-12-26
3#
发表于 2015-3-15 20:39:07 |只看该作者
这个帖要顶。

使用道具 举报

Rank: 4

精华
0
UID
3746
积分
518
帖子
118
主题
66
阅读权限
50
注册时间
2009-3-6
最后登录
2019-3-30
4#
发表于 2015-3-16 13:25:53 |只看该作者
本帖最后由 hal5667 于 2015-3-16 13:43 编辑
superwin 发表于 2015-3-15 10:16
三次出错发邮件,可以做一个变量,初始值为0,出错一次就加1,等于3的时候,发邮件,发完邮件,重置这个变 ...


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

使用道具 举报

Rank: 1

精华
0
UID
177938
积分
4
帖子
4
主题
0
阅读权限
10
注册时间
2013-12-21
最后登录
2017-10-11
5#
发表于 2017-10-4 11:55:41 |只看该作者
非常好的贴。喔顶

使用道具 举报

Rank: 2

精华
0
UID
231361
积分
90
帖子
64
主题
17
阅读权限
30
注册时间
2016-4-1
最后登录
2017-11-11
6#
发表于 2017-10-26 10:12:05 |只看该作者
请问没有看到发邮件提醒的代码呢?

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-20 18:54

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部