跨商品抓取資料K棒有誤差該如何解決

  •   165 
  • 最後發表   LeoWmLin  2024 四月 03
LeoWmLin 發文於   2024/03/27

小編你好 程式碼如下 執行商品為 台指近(一般) (日盤) 頻率為5分鐘 逐筆洗價

我想要計算開盤第一根5K的開盤價與收K價跟日夜盤的收盤比較

if (time=84500 and position = 0 and filled = 0) then begin   KBarOfDay = 1;    end

  else   begin   KBarOfDay = KBarOfDay+1;   end;

if KBarOfDay = 2  then  //判斷是不是8:45第2根 判斷跳空點數

begin  

//多方

    condition1 = (open[KBarOfDay-1] > close[KBarOfDay]);

         value1 = (ABSValue(open[KBarOfDay-1]-close[KBarOfDay])); 

value2 = (GetSymbolField("FITXN*1.TF", "close")[KBarOfDay-1] - GetSymbolField("FITXN*1.TF", "close")[KBarOfDay]); 

//空方

condition11 = (o[KBarOfDay-1] < close[KBarOfDay]) ;

          value11  = (ABsValue(o[KBarOfDay-1]-c[KBarOfDay])); 

value12  = (GetSymbolField("FITXN*1.TF", "close")[KBarOfDay-1] - GetSymbolField("FITXN*1.TF", "close")[KBarOfDay]);

 

if  {條件}  then begin 

         {...條件符合...}

end

else begin    {...條件不符合...} end;

end; 

 

以上的程式碼,都有利用print觀察變數,但發現一個問題是 回測的時候抓取的:

昨日夜盤收盤價(也就是04:55該K的收盤價) GetSymbolField("FITXN*1.TF", "close")[KBarOfDay] 是正確的

但盤中即時跑的print出來的是錯的 (會變成前一根04:50的收盤價)

 

GetSymbolField("FITXN*1.TF", "close")[KBarOfDay-1] 

//以上語法也會抓到 04:55 的 

 

//而不是如預期的在 KBarOfDay = 2  時(08:50) 抓前1根08:45 及前兩根 04:55

但同樣的寫法,在同商品(日盤)抓取的資料都是正確的。

0850 前一根 0845、前兩根為1340...就唯獨設定商品日盤、抓取全盤有誤

 

這個問題相當困擾,在回測的log檔是正確,但即時跑時會錯誤

該如何解決??

 

相當困擾....請幫忙解決

排序方式: 標準 | 最新
LeoWmLin 發文於   2024/03/28

今天測試⋯居然是1秒內有誤,後面就讀到正常的。

連續三根都是如此。

242是正確的,248是錯的。

這可能會影響進單

因為抓錯根,煩請儘速答覆

 

附加文件

XS小編 發文於   2024/03/29

 Hello LeoWmLin,

 

小編這邊會測試看08:45剛開盤時會不會發生相同狀況,如果可以的話麻煩提供 策略匯出檔包含腳本 來測試 (參考附圖,盤中測試看起來是正常的)。

可以直接將檔案上傳,也可以Mail至客服信箱 XQservice@XQ.com.tw 且務必附上 討論文章連結網址(小幫手才能盡早處理)。

感謝。

 

不過若是要抓開盤第一根5K的開盤價與收K價跟日夜盤的收盤的話,其實只要:

if time = 084500 then begin

    value1 = open;

    value2 = close;

    value3 = GetSymbolField("FITXN*1.TF", "close")[1];

    end;

然後在 085000 這根Bar 以後才使用這些數值,或是直接在 085000 時抓取:

if time = 085000 then begin

    value1 = open[1];

    value2 = close[1];

    value3 = GetSymbolField("FITXN*1.TF", "close")[2];

    end;

這樣應該能夠取得正確的數值。

 

附加文件

XS小編 發文於   2024/03/29

Hello LeoWmLin,

 

小編補充,經詢問相關人員判斷問題可能出在資料更新的時間差所導致,但需要 XQ Log 才能夠確認。

如果可以的話麻煩提供 XQ Log 讓相關人員檢驗。

Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。

您可以直接將檔案上傳,如果檔案過大的話也可以保存到雲端後將連結Mail至客服信箱 XQservice@XQ.com.tw 且務必附上 討論文章連結網址(小幫手才能盡早處理)。

感謝。

LeoWmLin 發文於   2024/04/01

我已經改成使用上面固定[1] [2] 的方式撰寫 避免變數切換有誤

但仍發生相同狀況,換K時 跨商品 都會差一根K 過一兩秒後才會正常(如附檔)

請協助尋找原因處理 

謝謝

 

p.s  20343是正確的04:55 這根

20339是04:50 是錯誤的

對應一下附檔的時間,目前還是會遇到問題

附加文件

XS小編 發文於   2024/04/03

Hello LeoWmLin,

 

經相關人員確認是如同小編上面所說,因為不同商品資料更新的時間差導致Bar更新有些差異。

相關人員會進行調整優化,但還是可能會遇到洗價時兩個商品換Bar時間不同的情形。

 

用小編上面那種寫法的話,可以確保只有在 084500/085000 這根Bar上的前面一秒左右會有錯誤的狀況,其他時間取用變數應該都不會有問題。

另外建議您可以搭配使用 GetSymbolField("FITXN*1.TF", "Time")[N] 來判斷取得的K棒時間並調整 N 的數值。

發表回覆
Close