使用了 isfirstcall("date")為何還是抓昨天的開盤價格

  •   335 
  • 最後發表   XQYi  2025 六月 05
XQYi 發文於   2025/06/03

如圖 超過09:00:抓到的是昨天開盤價

因是以今日開盤價做計算,如何在抓到今日開盤價後才執行運算?

交易程式碼如下
在開盤價出現之後做運算,以開盤價為基點,計算近日ATR價差的上下價位作為買賣點

// 買入條件

if isfirstcall("date") then

begin

   Print("現在1",CurrentTime," ATR上1:", _currentTime1, " ATR下2:", _currentTime2, " C1:", condition1, " C2:", condition2    ,"開盤",OPEND(0)); 

   Print("日期1",DAte,"成本",FilledAvgPrice*F1006,"買入價",value7,"賣出價",value8,"ATR價%",(value1/close)*100); 

 

If filledAtBroker<=2 and CurrentTime >= 090000      // 條件1: 庫存數量 <=2 且 交易時段內 (例如9點後)

  And  Position = 0         // 條件2: 目前空手 (Position 為使用者定義的倉位變數或XQ內建的 MarketPosition)

   // And_currentTime1 > _currentTime2

   // 條件3: 先觸發ATR上軌(_currentTime1較小),後觸發ATR下軌(_currentTime2較大),表示價格先上後拉回

  And  (( close cross Over value7) or getField("收盤價", "Tick")<= addSpread(GetField("跌停價", "D"),1)) 

    //價格回檔穿越ATR下軌

  and (value1 / Close) * 100 >= 2 // 條件4: ATR波動幅度需佔收盤價2%以上 (避免在極低波動時交易)

   // And condition2                // 條件5: 當前收盤價已低於ATR下軌 (觸發拉回買點)

  And filterPasses               // 條件6: 並且通過高點過濾 (不是買在近期相對高點)

   And slopeFilterPasses    // 條件7: 並且通過趨勢斜率過濾 (處於上升趨勢或未啟用過濾)

   // And GetField("外盤量") > GetField("內盤量")   // 簡單判斷:外盤量大於內盤量

And close <= _close        //價位以下

Then

Begin

    SetPosition(minList(Position+1,2), getField("收盤價", "Tick"),label:= "訊號觸發買進(斜率及高點過濾後)");

   // 建立1單位多單,進場價為value7 (ATR下軌價)

   BIT=Getfield("時間","Tick"); //記錄當下委託時間

if position > Position[1] then alert("日期",DAte,"成本",FilledAvgPrice*F1006,"買入價",value7,"賣出價",value8,"ATR價%",(value1/close)*100,"opend",openD(0)); 

End;

end;

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

我猜測,你會不會勾選了自動洗價,且在開盤前就抓今天的開盤價?這樣就會抓到前一個交易日的開盤價。

XQYi 發文於   2025/06/04

是的勾選了自動洗價,但是設定為 09:00~13:31,如下

1. 所以應取消自動洗價功能?

2. 這個函數不是應只觸發一次,但實際卻執行了2次,如圖01、05秒處 

3. 日K 勾選逐筆洗價自動洗價,print函數會依日K觸發條件符合後,

      且在每次的洗價時間時再執行一次 ?(可以單純依日K觸發嗎?)

虎科大許教授 發文於   2025/06/04

(1)是否該取消自動洗價,要看你執行洗價的需求。

(2)會洗價兩次,我猜測(尚待驗證),逐筆洗價的第一次洗價及自動洗價的第一次洗價,是獨立的。各自都在執行第一次洗價時列印結果。

(3)若(2)的猜測正確,就會觸發兩次。若只想觸發一次,就需要用變數控制。

XQYi 發文於   2025/06/04

感謝
明天試試看取消自動洗價,看是否能正確讀取當日的開盤價!

XQYi 發文於   2025/06/05

取消自動洗價後,資料正確!
自動洗價雖設09:00,讀取的資料會有前日開盤價的情況,此讀取資料後是否會造成計算錯誤?

虎科大許教授 發文於   2025/06/05

使用自動洗價,特性就是沒有Tick也會按照設定的秒數間隔洗價。這種情況存在風險。以今天的台積電為例,開盤價出現在090001,你從090000自動洗價,在090000洗價時,還沒有開盤價,就會抓到前一個交易日的開盤價。若延後開盤,也會發生相同的錯誤。

XQYi 發文於   2025/06/05

感謝 說明!

發表回覆
Close