共享一個(gè)V5版用AUTOIT監(jiān)控TB是否死機(jī)并自動(dòng)重開.(歡迎糾錯(cuò)) [開拓者 TB]
- 咨詢內(nèi)容:
本帖最后由 hal5667 于 2015-3-16 13:30 編輯
首先,寫一個(gè)TB公式,上兩個(gè)超級(jí)圖表,10秒周期的,掛上公式.每10秒寫一個(gè)開盤價(jià)進(jìn)文件里面.需要用兩個(gè)品種,AG和IF,因?yàn)闀r(shí)間跨度不一樣..
下例寫進(jìn):"D:\\openjiankong.log"
本來想寫:三次出錯(cuò)發(fā)郵件請求人工處理。但不知道怎么樣寫,歡迎高手補(bǔ)充。我是個(gè)菜鳥,下列代碼都是東拼西湊的,測試了2天,并模擬死機(jī)了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
然后下列是我自己編的東東,可能還有些紕漏,歡迎糾正。因?yàn)門B經(jīng)常跳出一些亂七八糟的東西。
大概思路是:監(jiān)控D:\\openjiankong.log的更新時(shí)間,如果和系統(tǒng)時(shí)間相差如果超過60秒,說明這個(gè)TB有可能死掉了,斷線了。殺進(jìn)程,重啟。
#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登陸賬號(hào)替換***
$TBloginpassword="*******" ;用你的TB登陸密碼替換***
$MAINWINDOWS = "交易開拓者平臺(tái)(旗艦版)"
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點(diǎn)錯(cuò)誤次數(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("交易開拓者錯(cuò)誤報(bào)告發(fā)送") Then
WinActivate("交易開拓者錯(cuò)誤報(bào)告發(fā)送")
Sleep(1000)
WinClose("交易開拓者錯(cuò)誤報(bào)告發(fā)送")
Sleep(1000)
EndIf
If $cha>60 And $mmm<4 Then
$mmm=$mmm+1;計(jì)算錯(cuò)誤次數(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)控這個(gè)文件,出錯(cuò)過多就報(bào)警。
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("確認(rèn)","","Button1");將當(dāng)前焦點(diǎn)定位到確認(rèn)鍵
Sleep(1000)
EndIf
Sleep(1000)
If ProcessExists("TradeBlazer.exe") And WinExists("交易開拓者平臺(tái)(旗艦版) - ") = 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("交易開拓者錯(cuò)誤報(bào)告發(fā)送") Then
WinActivate("交易開拓者錯(cuò)誤報(bào)告發(fā)送")
Sleep(1000)
WinClose("交易開拓者錯(cuò)誤報(bào)告發(fā)送")
Sleep(1000)
EndIf
;如果當(dāng)前時(shí)間沒有進(jìn)程,重啟進(jìn)程
If WinExists("交易開拓者平臺(tái)(旗艦版) - ") = 0 Then
If ProcessExists("TradeBlazer.exe") And WinExists("交易開拓者平臺(tái)(旗艦版) - ") = 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脫機(jī)登陸測試
; 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("歡迎登錄交易開拓者平臺(tái)(旗艦版)","用戶密碼錯(cuò)誤") Then
WinClose("歡迎登錄交易開拓者")
$result = -1
EndIf
If $result = -1 Then
MsgBox(4096, "登錄錯(cuò)誤提示", "TB登錄密碼錯(cuò)誤", 10)
ContinueLoop
EndIf
WinWaitActive("交易開拓者平臺(tái)(旗艦版) - ","",30)
Sleep(5000)
WinActivate("交易開拓者平臺(tái)(旗艦版) - ")
If WinExists("系統(tǒng)消息") Then
WinActivate("系統(tǒng)消息")
Sleep(1000)
WinClose("系統(tǒng)消息")
Sleep(1000)
EndIf
Sleep (10000)
WinMenuSelectItem("交易開拓者平臺(tái)(旗艦版) - ","","交易(&T)", "交易帳戶登錄");登錄帳戶
ControlFocus("帳戶登錄","","Button1")
Sleep(1000)
ControlClick("帳戶登錄","","Button1")
Sleep(25000) ;等15秒,開始自動(dòng)交易
WinActivate("交易開拓者平臺(tái)(旗艦版) - ")
WinMenuSelectItem("交易開拓者平臺(tái)(旗艦版) - ","","文件(&F)", "啟動(dòng)所有自動(dòng)交易")
Sleep(2000)
EndIf
EndIf;如果時(shí)間差大于60,并且進(jìn)程存在,殺進(jìn)程
EndIf
Sleep(10)
WEnd
Sleep(2000)
注:TB系統(tǒng)設(shè)置-重啟TB后打開最后保存的所有工作區(qū)。 - TB技術(shù)人員:
三次出錯(cuò)發(fā)郵件,可以做一個(gè)變量,初始值為0,出錯(cuò)一次就加1,等于3的時(shí)候,發(fā)郵件,發(fā)完郵件,重置這個(gè)變量為0。
你那個(gè)代碼中間發(fā)送那么多TAB鍵,只是要選中那個(gè)暫停自動(dòng)登陸嗎,其實(shí)要一直暫停自動(dòng)登陸,在TB的config.env文件里修改就可以了,改成如下圖
2222.png (9.13 KB, 下載次數(shù): 3) 2015-3-15 10:14:13 上傳 下載次數(shù): 3
這樣比發(fā)送模擬按鍵還穩(wěn)定得多了。 - TB客服:
這個(gè)帖要頂。
- 網(wǎng)友回復(fù):
本帖最后由 hal5667 于 2015-3-16 13:43 編輯
superwin 發(fā)表于 2015-3-15 10:16
三次出錯(cuò)發(fā)郵件,可以做一個(gè)變量,初始值為0,出錯(cuò)一次就加1,等于3的時(shí)候,發(fā)郵件,發(fā)完郵件,重置這個(gè)變 ...
原來如此。一直都不知道這回事,謝謝解決了我的一大問題。
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 1145508240 進(jìn)行 有償 編寫!(不貴!點(diǎn)擊查看價(jià)格!)
相關(guān)文章
-
沒有相關(guān)內(nèi)容