共享一個V5版用AUTOIT監(jiān)控TB是否死機并自動重開.(歡迎糾錯)
作者:開拓者 TB 來源:cxh99.com 發(fā)布時間:2015年06月08日
- 咨詢內(nèi)容:
本帖最后由 hal5667 于 2015-3-16 13:30 編輯
首先,寫一個TB公式,上兩個超級圖表,10秒周期的,掛上公式.每10秒寫一個開盤價進文件里面.需要用兩個品種,AG和IF,因為時間跨度不一樣..
下例寫進:"D:\\openjiankong.log"
本來想寫:三次出錯發(fā)郵件請求人工處理。但不知道怎么樣寫,歡迎高手補充。我是個菜鳥,下列代碼都是東拼西湊的,測試了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經(jīng)常跳出一些亂七八糟的東西。
大概思路是:監(jiān)控D:\\openjiankong.log的更新時間,如果和系統(tǒng)時間相差如果超過60秒,說明這個TB有可能死掉了,斷線了。殺進程,重啟。
#Region ;**** 參數(shù)創(chuàng)建于 ACNWrapper_GUI ****
#PRE_icon=C:\Windows\syswow64\SHELL32.dll|-239
#PRE_Res_requestedExecutionLevel=None
#EndRegion ;**** 參數(shù)創(chuàng)建于 ACNWrapper_GUI ****
;注意,一定要把AutoIt腳本文件放在TB安裝目錄下,與TB執(zhí)行程序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點錯誤次數(shù)清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 基礎(chǔ)類應(yīng)用程序") Then
WinActivate("TBDataCenter Microsoft 基礎(chǔ)類應(yīng)用程序")
Sleep(1000)
WinClose("TBDataCenter Microsoft 基礎(chǔ)類應(yīng)用程序")
Sleep(1000)
EndIf
If WinExists("交易開拓者錯誤報告發(fā)送") Then
WinActivate("交易開拓者錯誤報告發(fā)送")
Sleep(1000)
WinClose("交易開拓者錯誤報告發(fā)送")
Sleep(1000)
EndIf
If $cha>60 And $mmm<4 Then
$mmm=$mmm+1;計算錯誤次數(shù)
$msg="服務(wù)器出現(xiàn)異常"&$mmm&"次!";只重啟3次,多于3次就人工處理。
_FileCreate("D:\msgpush\income\error\1.log")
_FileWriteLog("D:\msgpush\income\error\1.log", $msg);我寫了另外的監(jiān)控這個文件,出錯過多就報警。
If WinExists("TBDataCenter Microsoft 基礎(chǔ)類應(yīng)用程序") Then
WinActivate("TBDataCenter Microsoft 基礎(chǔ)類應(yīng)用程序")
Sleep(1000)
WinClose("TBDataCenter Microsoft 基礎(chǔ)類應(yīng)用程序")
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 基礎(chǔ)類應(yīng)用程序") Then
WinActivate("TBDataCenter Microsoft 基礎(chǔ)類應(yīng)用程序")
Sleep(1000)
WinClose("TBDataCenter Microsoft 基礎(chǔ)類應(yīng)用程序")
Sleep(1000)
EndIf
If WinExists("交易開拓者錯誤報告發(fā)送") Then
WinActivate("交易開拓者錯誤報告發(fā)送")
Sleep(1000)
WinClose("交易開拓者錯誤報告發(fā)送")
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("系統(tǒng)消息") Then
WinActivate("系統(tǒng)消息")
Sleep(1000)
WinClose("系統(tǒng)消息")
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系統(tǒng)設(shè)置-重啟TB后打開最后保存的所有工作區(qū)。
- TB技術(shù)人員:
三次出錯發(fā)郵件,可以做一個變量,初始值為0,出錯一次就加1,等于3的時候,發(fā)郵件,發(fā)完郵件,重置這個變量為0。
你那個代碼中間發(fā)送那么多TAB鍵,只是要選中那個暫停自動登陸嗎,其實要一直暫停自動登陸,在TB的config.env文件里修改就可以了,改成如下圖
2222.png
(9.13 KB, 下載次數(shù): 3)
2015-3-15 10:14:13 上傳
下載次數(shù): 3
這樣比發(fā)送模擬按鍵還穩(wěn)定得多了。
- TB客服:
這個帖要頂。
- 網(wǎng)友回復(fù):
本帖最后由 hal5667 于 2015-3-16 13:43 編輯
superwin 發(fā)表于 2015-3-15 10:16
三次出錯發(fā)郵件,可以做一個變量,初始值為0,出錯一次就加1,等于3的時候,發(fā)郵件,發(fā)完郵件,重置這個變 ...
原來如此。一直都不知道這回事,謝謝解決了我的一大問題。