警示設定尾盤試搓偏離值

  •   7 
  • 最後發表   crswin  5 小時前
crswin 發文於   2026/05/13

// =========================================================

// XQ 警示腳本:尾盤試搓異動偵測 (2026 ETF 換股季專用)

// =========================================================

// 用途:在 13:25 ~ 13:29:59 試搓期間,偵測股價相對於 13:24

//      最後成交價的偏離程度。當偏離 >= 1.5% 且試搓量達標時觸發警示。

//

// 適用:XQ 全球贏家 - 策略雷達 (警示腳本)

// 相容:資料讀取筆數 = 1 的鎖定環境

// 版本:v2.0 - 2026/05/13

// =========================================================

 

SetTotalBar(1);

 

// --- 變數宣告 ---

variable:

    matchPrice(0),       // 試搓當下價

    preMatchPrice(0),    // 13:24 區間最後成交價 (基準價)

    priceDiff(0),        // 偏離百分比

    matchVol(0);         // 試搓區間累積成交量

 

 

// =========================================================

// 階段一:13:24 區間 — 持續更新基準價

// =========================================================

// 每收到一筆 Tick 就更新 preMatchPrice,

// 到 13:24:59 時,preMatchPrice 會是該分鐘最後一筆成交價,

// 也就是試搓開始前最接近的「正常交易價」。

// =========================================================

if Time >= 1324 and Time < 1325 then begin

    preMatchPrice = q_Last;

end;

 

 

// =========================================================

// 階段二:13:25 ~ 13:29:59 試搓期間 — 偵測異常偏離

// =========================================================

// 觸發條件:偏離絕對值 >= 1.5% 且 當分 K 棒成交量 >= 10 張

// (避開 13:30:00 的正式收盤撮合,防止瞬間放大誤觸發)

// =========================================================

if Time >= 1325 and Time < 1330 then begin

    matchPrice = q_Last;

    matchVol = Volume;   // 改用 Volume 取代 q_TickVolume,相容性最佳

 

    if preMatchPrice > 0 then begin

        priceDiff = (matchPrice - preMatchPrice) / preMatchPrice * 100;

 

        if AbsValue(priceDiff) >= 1.5 and matchVol >= 10 then begin

            RetMsg = "【ETF換股預警】量:" + NumToStr(matchVol, 0)

                   + "張, 偏離:" + NumToStr(priceDiff, 2) + "%";

            Ret = 1;

        end;

    end;

end;

 

 

// =========================================================

// 階段三:時段外重置變數

// =========================================================

// 避免昨日殘留數值污染今天的判斷

// =========================================================

if Time >= 1330 or Time < 1324 then begin

    preMatchPrice = 0;

    Ret = 0;

end;

 

請問這樣警示該如何修改才能跳出來,另外,資料讀取筆數被固定為1筆,該如何讓它可以更改

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2026/05/13

(1)你使用Time來判斷時間,應註明K棒頻率。我估計應該是使用1分鐘頻率。

(2)matchPrice,preMatchPrice,priceDiff,matchVol等變數應該加intraBarPersist宣告。

(3)Time >= 133000這個條件不可能成立。1分K最後一根的Time是132900。

(4)在收盤前的試撮,q_Last不會有資料。你應該配合自動洗價,用q_simulatedTradePrice抓試撮價格。

(5)Volume是每根K棒的成交量。在試撮期間的1分K成交量都是0。若要抓試撮量,應使用q_simulatedTradeVolume。

 

crswin 發文於   2026/05/13

非常感謝! 已經改好明天來試試!

 

crswin 發文於   2026/05/13

SetTotalBar(1);

variable: intraBarPersist

    matchPrice(0),       // 試撮估計成交價

    preMatchPrice(0),    // 13:24 連續交易最後成交價(基準)

    priceDiff(0),        // 偏離百分比

    matchVol(0);         // 試撮估計成交量

if Time = 132400 then begin

    preMatchPrice = q_Last;

end;

if Time >= 132500 and Time <= 132900 then begin

    matchPrice = q_simulatedTradePrice;    // 試撮估計成交價

    matchVol   = q_simulatedTradeVolume;   // 試撮估計成交量

 

    if preMatchPrice > 0 and matchPrice > 0 then begin

        priceDiff = (matchPrice - preMatchPrice) / preMatchPrice * 100;

 

        // 觸發條件:偏離絕對值 >= 1.5% 且 試撮量 >= 10 張

        if AbsValue(priceDiff) >= 1.5 and matchVol >= 10 then begin

            RetMsg = "【ETF換股預警】量:" + NumToStr(matchVol, 0)

                   + "張, 偏離:" + NumToStr(priceDiff, 2) + "%";

            Ret = 1;

        end;

    end;

end;

if Time < 132400 or Time > 132900 then begin

    preMatchPrice = 0;

    Ret = 0;

end;

目前改成這樣了~~

 

虎科大許教授 發文於   2026/05/13

四個變數都要加上intrabarpersist,你這樣寫,只有第一個有intrabarpersist。

crswin 發文於   2026/05/14

難怪今天沒跳..

crswin 發文於   2026/05/14

SetTotalBar(1);

variable: intraBarPersist matchPrice(0);       // 試撮估計成交價

variable: intraBarPersist preMatchPrice(0);    // 13:24 連續交易最後成交價(基準)

variable: intraBarPersist priceDiff(0);        // 偏離百分比

variable: intraBarPersist matchVol(0);         // 試撮估計成交量

 

if Time = 132400 then begin

    preMatchPrice = q_Last;

end;

if Time >= 132500 and Time <= 132900 then begin

    matchPrice = q_simulatedTradePrice;    // 試撮估計成交價

    matchVol   = q_simulatedTradeVolume;   // 試撮估計成交量

 

    if preMatchPrice > 0 and matchPrice > 0 then begin

        priceDiff = (matchPrice - preMatchPrice) / preMatchPrice * 100;

 

        // 觸發條件:偏離絕對值 >= 1.5% 且 試撮量 >= 10 張

        if AbsValue(priceDiff) >= 1.5 and matchVol >= 10 then begin

            RetMsg = "【ETF換股預警】量:" + NumToStr(matchVol, 0)

                   + "張, 偏離:" + NumToStr(priceDiff, 2) + "%";

            Ret = 1;

        end;

    end;

end;

if Time < 132400 or Time > 132900 then begin

    preMatchPrice = 0;

    Ret = 0;

end;

改好了 明天再試試看..謝謝您多多指教

發表回覆
Close