
勾選自動洗價並設定成6秒, 我的理解緊示腳本應該每6秒就run一次不論盤中是否有有沒有新的成交, 但我檢查print log 後發現並未如預期每6秒就update 一次log , 我同時有檢查 cpu和記憶體此用率, cpu 只有使用3% , 記憶體使用17%,確定不是硬體的問題, 請問小編能說明一下嗎?

勾選自動洗價並設定成6秒, 我的理解緊示腳本應該每6秒就run一次不論盤中是否有有沒有新的成交, 但我檢查print log 後發現並未如預期每6秒就update 一次log , 我同時有檢查 cpu和記憶體此用率, cpu 只有使用3% , 記憶體使用17%,確定不是硬體的問題, 請問小編能說明一下嗎?
若設定6秒鐘自動洗價,則至少每6秒就會洗價一次,是否有使用條件控制特定條件才Print?
這是我警示腳本
//---------------------------
variable : intraBarPersist init(0), intraBarPersist main(0);
variable : intraBarPersist TodayVol(0);
//-------------------------------------------------------------------------------------------------
if date[0]=currentDate and hour(time)=hour(CurrentTime) and minute(time)=minute(currentTime) then begin
main=1;
end
else begin
main=0;
end;
//-------------------------------------------------------------------------------------------------
if main=1 then begin // main(1) -------------------------------------------------------------------
if Init=0 then begin
TodayVol=GetField("volume","d");
init=1;
Print( File("C:\Log_[Symbol].log"), text("TodayVol"), text(" CurrentTimeMS"),text(" Time") );
end; // init end --------------------------------
TodayVol=GetField("volume","d");
Print( File("C:\Log_[Symbol].log"), numtostr(TodayVol,0), text(" | "), numtostr(CurrentTimeMS,3), text(" "), numtostr(q_time,0) );
end; // main(1) end --------------------------------------------------------------------------------
若你的執行頻率是日頻率,就會有你說的問題。
我是掛在1分K下去跑

init等於0才會列印,且等於0之後馬上又讓它變成1,所以只會列印一次。
source code 內有兩處 print(), 第二個print 跟 init等不等於1沒有關係.
你的控制變數main有問題。它有機會變成0。這會使得整個策略執行期間都不會Print。
例如,在轉換小時或轉換分鐘時,流程可能跑到else這裡讓main等於0。因為hour(time)可能不等於hour(currentTime),minute(time)可能不等於minute(currentTime)。

main這邊要跟老師釐清一下, 由於我有把緊示腳本掛在排程上, 啟動時間是每天的 8:40, 由於 main 是 intraBarPersist, 理論上只要 9:00 一開盤 Date[0]=currentDate and hour(time)=hour(CurrentTime) and minute(time)=minute(currentTime) 這條件式就要全部 align ,不太可能有老師所說的現象, 只有一種可能那就是 9:00 開盤當下警示的標的沒有任何成交產生, 但我有檢査log, 發生的情況如下圖所示, 這兩列分別是 CurrentTimeMS 跟 q_time, 我的問題點在於, 雖然這個標的在時間 100958.202~101752.325 之間沒有任何成交, 但依照警示每6秒run一次的設定, 應該這過程都要有 log 產生才是, 除非以上我理解錯誤.

你的條件能成立的前提是你的Windows系統時間(亦即currentTime)與洗價時XQ資料的時間(Time)是一致的,然而,洗價時,兩者可能並不一致,這種情況下,你的main就變成0,而後面的洗價都不會Print了。例如,換分鐘時,你的系統時間慢了0.5秒,則Time是090000,而你的currentTime是085955,兩者的hour及minute都不一樣,這時候main被設定為0,且一直為0,所以整個策略執行期間都不會Print。
老師你好, 我想把問題的 scope 再縮小一點, 我們討論時間 100958.202~101752.325之間的狀況即可, 從程式邏輯來說 100958.202 這時間點已知 print 沒有問題, 由於 main 是 intraBarPersist, 因此我們可以確信 main 必等於 1, 因此問題就會限縮於為何100958.202~101752.325之間沒有 print log, 縱然在這段時間內沒有新的成交產生 , 理論上6秒後要更新, 則 101004.202 (100958.202 + 6秒) 也應該要有新的 print 出現 , 這是我目前覺得異常的地方.
15 評論