自動交易重新啟動後,if Date <> CurrentDate then return; 會讓 return 之後的自訂變數在歷史K棒變成 0 嗎?

  •   3 
  • 最後發表   小小的茶米  1小時前
小小的茶米 發文於   2026/11/15

1. 自動交易啟動時,會不會先逐根跑歷史 K 棒?跑歷史 K 棒的時候,CurrentDate 回傳的是今天,還是那根 K 棒的日期?

2. 某根 K 棒執行到 return 時,後面才賦值的變數在那一根是什麼值:保留前一根的值,還是宣告時的初始值 0?

3. 附兩支幾行的最小範例:寫法 A 把變數放在 return 後面,寫法 B 放在前面,兩支都把 avgV 寫進 log。請確認「重開 XQ 後兩支不同、回測時相同」這個理解對不對。

寫法 A(變數在 return 之後計算):

var: diff(0), avgV(0);

if Date <> CurrentDate then return;

diff = Close - Close[1];

avgV = Average(diff, 9);

print(file("C:\XQ_test\A.log"), Date, Time, diff, diff[1], avgV);

 

 

寫法 B(變數在 return 之前計算):

var: diff(0), avgV(0);

diff = Close - Close[1];

avgV = Average(diff, 9);

if Date <> CurrentDate then return;

print(file("C:\XQ_test\B.log"), Date, Time, diff, diff[1], avgV);

 

  4. 如果只想擋住下單、但指標要照常累積,請問建議的寫法是把序列變數都移到 return 前面,還是改用 GetInfo("TradeMode")/"IsRealTime" 判斷?後者各數值代表哪個階段?

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

(1)在自動交易中心啟動策略,會跑歷史K棒。CurrentDate是電腦系統的日期,而Date是K棒的日期。

(2)自動交易時,若程式設定Date <> CurrentDate就return,且此條件放在變數之前,則今天K棒的變數值,就是宣告時的預設值。若放在變數運算之後,則變數照常運算。

(3)回測時,CurrentDate與Date相同,都是資料日期。if Date <> CurrentDate 條件永遠為False。

(4)Return是非結構式的寫法,若你要在自動交易時擋住下單,用結構式寫法,亦即符合條件才下單,這樣會比較好。

發表回覆
Close