自動交易執行 2/21 智冠(5478) 取K棒數值有異狀 & 模擬單撮合價格異常

  •   146 
  • 最後發表   PCC  2023 三月 20
PCC 發文於   2023/02/22

小幫手你好:

2/21 對商品 智冠(5478) 執行交易腳本遇到 2 個問題:

 

(1) 取K棒高低價位不正確

腳本的執行頻率是5分鐘K,邏輯是等第一根K棒過了,也就是 09:05 之後去看第一根K棒價格。

 

程式碼如下:

if (currentTime >= 090500) then
begin
   offset = GetBarOffset(date, 090000);
   print(Text("[盤中] 今日第一根5分K高低點: barTime=[", NumToStr(time[offset], 0), "] high=[", NumToStr(high[tempNum], 2), "] low=[", NumToStr(low[tempNum], 2), "]"));
end;

 

 

2/21 智冠5分鐘K棒狀況如下:

  • [09:00-09:05] OHLC 均 80.50
  • [09:05-09:10] 無成交量
  • [09:10-09:15] O=80.30, H=80.30, L=80.10, C=80.10

 

因為 09:05 的 K 棒無成交量,實際等到 09:13 才有洗價觸發腳本,去看 09:00 的K棒,

預期取出來的高點和低點都是 80.50,但低點卻得到 80.00,請問是什麼原因?

log:

 

20230221 09:13:03.971 智冠(5478) 列印 [盤中] 今日第一根5分K高低點: barTime=[90000] high=[80.50] low=[80.00]

 

 

(2) 模擬單撮合價格異常

智冠(5478) 2/21 的高點 80.80,低點 78.80。

13:21 透過腳本買進市價單,交易帳號使用內建模擬模擬帳號,

撮合價卻都出現 81 塊以上,比當日最高價還高,不正常,請問是什麼原因?

歷史成交查詢:

成交時間,盤別,交易類別,股票名稱,成交數量,成交單價,成交價金,委託書號,來源別

2023/2/21 13:21 整股 現股買進 智冠(5478) 1 80.6 80600 1b5Xj XQTrade

2023/2/21 13:21 整股 現股買進 智冠(5478) 4 81 324000 1b5Xj XQTrade

2023/2/21 13:21 整股 現股買進 智冠(5478) 1 81.8 81800 1b5Xj XQTrade

2023/2/21 13:21 整股 現股買進 智冠(5478) 2 81.7 163400 1b5Xj XQTrade

2023/2/21 13:21 整股 現股買進 智冠(5478) 4 81.6 326400 1b5Xj XQTrade

 

請小幫手解惑,謝謝

排序方式: 標準 | 最新
XQ小幫手 發文於   2023/02/23

 Hello PCC,

 

1. 您的腳本中用 offset 來保存相對位置,但print中只有 barTime 是取 time[offset],其他的 high 跟 low 是取 [tempNum]。

應該是此原因導致取到的相對位置不同。

另外小幫手建議在指定時間是用變數保存所需數值效率上會比較好。

舉例來說:

if time = 090000 then begin

    value1 = high;

    value2 = low;

    end;

這樣value1和value2就會是第一根Bar的高低點。

 

2.就小幫手所知,在即時策略運作用模擬交易買進時,會參考當時的報價和對應的委託量來執行買進。

所以當您一次下出大量的市價單時是會打穿好幾檔價格的,而這就可能造成買進的價格超出了當時甚至盤後確認的最高價。

需注意這在成交量小的商品較容易發生。

PCC 發文於   2023/02/23

Hi 小幫手,

(2) 已了解,謝謝。

 

(1) 的程式碼是我貼上來時手誤,

貼上來時本來想換個易理解的變數名稱方便小幫手理解意思,但手誤沒貼好,

實際腳本的變數名稱都是 tempNum 如下,所以應該不是變數的問題

var: tempNum(0);
if (currentTime >= 090500) then
begin
   tempNum = GetBarOffset(date, 090000);
   print(Text("[盤中] 今日第一根5分K高低點: barTime=[", NumToStr(time[tempNum], 0), "] high=[", NumToStr(high[tempNum], 2), "] low=[", NumToStr(low[tempNum], 2), "]"));
end;

再請小幫手幫忙解惑

 

XQ小幫手 發文於   2023/03/01

 Hello PCC,

 

小幫手會建議您在列印時將 tempNum 和日期也一併列印出來比較,或許會比較容易看出問題所在。(ex. 是否有取到錯誤的位置)

這邊用回測測試沒有發生相同的情況。(參考附圖)

如果還是有問題的話,麻煩您提供 XQ Log 來檢驗。

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

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

感謝。

附加文件

PCC 發文於   2023/03/02

Hi 小幫手,

謝謝回覆和測試。

我是交易腳本執行當下有問題,回測也許無法復現,

已將相關 LOG 和腳本資訊 email 至 XQservice@XQ.com.tw,

請再幫忙釐清,謝謝

 

XQ小幫手 發文於   2023/03/09

Hello PCC,

 

這個問題類似 無成交量的K棒取價得到 0 的狀況。

差別是在於智冠在 09:00 和 09:03 有交易,所以是有開盤第一根Bar的。(因此不會取到0)

會取到錯誤的資訊推測可能是因為即時資料更新時有誤所導致。

目前相關人員已經在線上的最新版本中修正,您可以在網站上下載最新的版本 (.09.03 230222) 使用應該就不會再發生相同的問題。

PCC 發文於   2023/03/14

Hi 小幫手,

謝謝相關人員協助釐清 root cause。

目前相關人員已經在線上的最新版本中修正,您可以在網站上下載最新的版本 (.09.03 230222) 使用應該就不會再發生相同的問題。

請問最新版本是 3.09.03 還是 3.09.04?

我現在的版本顯示「3.09.04 230105」,點選單「設定」->「版本更新」顯示目前已是最新版本,無法再更新

  • 版本編號: 3.09.04
  • 版本更新: 目前是最新版本

 

 

XQ小幫手 發文於   2023/03/15

Hello PCC,

 

不好意思小幫手上面有打錯,應該是 .09.04 230222 才對。

目前系統同一版本中 (.09.04) 會顯示版本,但是後面的日期會不同,新的會包含一些bug的修復。

要更新到 230222 的版本的話,請在網站上重新下載最新的版本後更新

就小幫手所知,相關人員有在規劃讓同一版本不同日期也跳出更新版本的通知。

PCC 發文於   2023/03/16

了解,謝謝小幫手解說版號規則

 

建議官網的下載頁能顯示完整版號,

現在只有寫「3.09.04」這樣的主版號,

用戶即使願意自己主動定期去檢查更新,也無從判斷是否有新 bugfix 版可下載。

下載的檔案檔名、安裝畫面也都看不出版號,

 

只能安裝完畢打開程式才能知道有沒有新版號。

如果有網站視覺考量,日期版號可以用 smaller 字型小一點,但至少顯示資訊。

 

XQ小幫手 發文於   2023/03/20

Hello PCC,

 

小幫手會將您的建議轉告相關人員作參考。

感謝。

發表回覆
Close