自動洗價時間及print log 問題

  •   250 
  • 最後發表   ccy  2026 九月 16
ccy 發文於   2026/09/15


截圖圖片

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

排序方式: 標準 | 最新
虎科大許教授 發文於   2026/09/15

若設定6秒鐘自動洗價,則至少每6秒就會洗價一次,是否有使用條件控制特定條件才Print?

ccy 發文於   2026/09/15

這是我警示腳本
//---------------------------

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 --------------------------------------------------------------------------------

 

 

虎科大許教授 發文於   2026/09/15

若你的執行頻率是日頻率,就會有你說的問題。

ccy 發文於   2026/09/15

我是掛在1分K下去跑

截圖圖片

虎科大許教授 發文於   2026/09/15

init等於0才會列印,且等於0之後馬上又讓它變成1,所以只會列印一次。

ccy 發文於   2026/09/15

source code 內有兩處 print(), 第二個print 跟 init等不等於1沒有關係.

 

虎科大許教授 發文於   2026/09/15

你的控制變數main有問題。它有機會變成0。這會使得整個策略執行期間都不會Print。

例如,在轉換小時或轉換分鐘時,流程可能跑到else這裡讓main等於0。因為hour(time)可能不等於hour(currentTime),minute(time)可能不等於minute(currentTime)。

ccy 發文於   2026/09/15

截圖圖片


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 產生才是, 除非以上我理解錯誤.

截圖圖片

虎科大許教授 發文於   2026/09/15

你的條件能成立的前提是你的Windows系統時間(亦即currentTime)與洗價時XQ資料的時間(Time)是一致的,然而,洗價時,兩者可能並不一致,這種情況下,你的main就變成0,而後面的洗價都不會Print了。例如,換分鐘時,你的系統時間慢了0.5秒,則Time是090000,而你的currentTime是085955,兩者的hour及minute都不一樣,這時候main被設定為0,且一直為0,所以整個策略執行期間都不會Print。

ccy 發文於   2026/09/15

老師你好, 我想把問題的 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 出現 , 這是我目前覺得異常的地方.

 

顯示更多回應 發表回覆
Close