夜盤時變數重置

  •   354 
  • 最後發表   無情卻慈悲  2025 二月 21
無情卻慈悲 發文於   2025/02/17

我想問一下,當夜盤開始時我想讓變數重置,我會用以下寫法

if Time  >= 150000 and Date <> Date[1]

但我想在回測時,當「每日」時間大於150000只重置第一次,應如何寫?謝謝

--

修正一下問法,
1、盤中 : 當夜盤開始時,把變數重置歸0,但是問題來了,若啟動策略的時間不一定是剛好150000,也可能是晚上18:07才啟動策略,故這樣的寫法理論上是可以的嗎 if Time  >= 150000 and Date <> Date[1]  。

 2、跨日 : 若策略啟動後一直沒停止過,一直運作到隔日的下午夜盤開始了,那麼上述的寫法也會讓變數重置嗎?

 

以上,謝謝。

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/02/17

看你的頻率是多少,若是5分鐘,則if Time=150000 then...

XS小編 發文於   2025/02/19

Hello 無情卻慈悲,

 

date 會是現實的日期,GetFieldDate("Date") 才會是商品換日的日期。

簡單來說,夜盤開盤時(15:00:00)會換日的是 GetFieldDate("Date")。

Time  >= 150000 會讓腳本在 15:00 ~ 23:59 之間都符合條件,Time=150000 會比較適合。

或是可以用另一個變數控制,例如:

var: intrabarpersist _Date(0);

 

if GetFieldDate("Date") <> _Date then begin

    _Date = GetFieldDate("Date");

    //重置變數

    end;

 

這樣每次換日時 (15:00) 變數都會重置。

無情卻慈悲 發文於   2025/02/19

您的意思是我,我只要寫成

if Time  >= 150000 and GetFieldDate("Date") <> GetFieldDate("Date")[1]

一樣使用>=,這樣換日時 (15:00) 變數都會重置的,對嗎

 

XS小編 發文於   2025/02/21

Hello 無情卻慈悲,

 

time 回傳的是K棒開始的時間,故就算在開盤時沒啟動,只要還在第一根Bar上運算,則該條件都會符合。

您用 if GetFieldDate("Date") <> GetFieldDate("Date")[1] 或 if Time = 150000 或 if Time  >= 150000 and GetFieldDate("Date") <> GetFieldDate("Date")[1] 都可以當作換日的條件判斷。

但若策略啟動時間在下午開盤後過了第一根K棒的話,必須要資料讀取筆數足夠,確保其運算到下午開盤的第一根K棒才行。

發表回覆
Close