共享一个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 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容