以下是我問Gemini的話
“現在是下午一點20分,目前股價是當日最高價,今天漲幅超過3%,成交量超過2000張,過去20天從來沒有單日漲超過2%,符合這些條件的股票請觸發”,這幫我把這段敘述寫成XSCRIPT的策略雷達腳本
下面是它的回答全文
是一個非常經典且實戰價值極高的**「尾盤異動突破」**策略!
您設定的這幾個條件組合起來非常巧妙:
-
過去20天從沒漲超過2%:代表這檔股票被市場徹底遺忘,籌碼極度沉澱,沒有當沖客或短線客在裡面攪和。
-
今天漲幅過3% 且 成交量過2000張:代表今天有實質的大資金介入,打破了長期的沉悶。
-
下午1:20 且 收在最高價:這是一天當中「最關鍵的表態時刻」。主力願意在尾盤收最高,代表他們完全不怕隔天的賣壓,甚至準備要直接做隔日沖或是發動波段。
我已經將您的 「🛡️ XScript 語法與 XQ 欄位避坑清單 V5」 視為最高準則。針對盤中雷達的特性,我特別使用了 GetField("...", "D") 來精準抓取跨頻率的當日總量與最高價,並用 Highest 函數優雅地處理了過去 20 天的沉寂狀態。
以下是為您量身打造的**「尾盤沉寂爆發雷達腳本」**:
// 策略名稱:尾盤沉寂爆發與創高突破雷達
// 策略類型:策略雷達 (請設定於 1分鐘線 或 Tick 頻率執行)
SetTotalBar(30); // 確保有足夠天數計算過去 20 天的日線漲跌幅
var:
refPrice(0), dailyHigh(0), dailyVol(0), pastMaxGain(0),
isTimeMatch(false), isHighestPrice(false), isGainMatch(false), isVolMatch(false), isQuietPast(false);
// ==========================================
// 1. 時間濾網:下午 1:20 (13:20:00) 之後
// ==========================================
// 實務上通常設定為大於等於該時間,確保 1:20 之後只要觸發條件就通知
if Time >= 132000 then
isTimeMatch = true
else
isTimeMatch = false;
// ==========================================
// 2. 當日價量條件:漲幅 > 3% 且 累積成交量 > 2000張
// ==========================================
refPrice = GetField("參考價", "D");
dailyVol = GetField("成交量", "D");
// 防呆機制:確保參考價大於 0 才計算漲幅,避免新股或異常資料報錯
if refPrice > 0 and (Close - refPrice) / refPrice * 100 > 3.0 then
isGainMatch = true
else
isGainMatch = false;
if dailyVol > 2000 then
isVolMatch = true
else
isVolMatch = false;
// ==========================================
// 3. 創高條件:目前股價等於當日最高價
// ==========================================
dailyHigh = GetField("最高價", "D");
// 盤中即時價格等於今日最高價 (強勢表態)
if Close = dailyHigh then
isHighestPrice = true
else
isHighestPrice = false;
// ==========================================
// 4. 籌碼沉澱條件:過去 20 天從來沒有單日漲超過 2%
// ==========================================
// 抓取過去 20 天 (從昨天 [1] 開始往前算) 的最大單日漲幅
pastMaxGain = Highest(GetField("漲跌幅", "D")[1], 20);
if pastMaxGain <= 2.0 then
isQuietPast = true
else
isQuietPast = false;
// ==========================================
// 綜合篩選與觸發
// ==========================================
if isTimeMatch and isGainMatch and isVolMatch and isHighestPrice and isQuietPast then
begin
ret = 1;
// 雷達觸發時,推播顯示輔助判斷欄位
outputfield1((Close - refPrice) / refPrice * 100, "今日漲幅(%)");
outputfield2(dailyVol, "今日累積總量");
outputfield3(pastMaxGain, "近20日最大漲幅(%)");
end;
💡 策略雷達實戰設定小提醒
把這支程式放到 XQ 的**「策略雷達」**時,建議的執行頻率設定為 「1分鐘線」 或 「洗價:逐筆洗價」。這樣只要時間一跨過 1:20,系統就會即時掃描全市場,把剛好拉到最高價的沉澱飆股直接推播到您的畫面上!
拉著我到xscript編輯器中開啟一個新腳本

接著把gemini寫的腳本複製貼上後按編譯,然後就出現了一大堆的錯誤訊息
看完這些訊息之後,我整理完大約就三個問題,於是我跟Gemini說
變數宣告中不能使用到daily這個字串,在警示腳本中不能使用漲跌幅,要自己算,在警示腳本中沒有支援outputfield
於是它重寫了一個腳本
// 策略名稱:尾盤沉寂爆發與創高突破雷達 (警示腳本專用版)
// 執行頻率:1分鐘線 或 Tick
var:
refPrc(0), highToday(0), volToday(0), gainToday(0),
i(0), pastGain(0),
isTimeMatch(false), isHighestPrice(false), isGainMatch(false), isVolMatch(false), isQuietPast(true);
// ==========================================
// 1. 時間濾網:下午 1:20 (13:20:00) 之後
// ==========================================
if Time >= 132000 then
isTimeMatch = true
else
isTimeMatch = false;
// ==========================================
// 2. 當日價量條件:漲幅 > 3% 且 累積成交量 > 2000張
// ==========================================
refPrc = GetField("參考價", "D");
volToday = GetField("成交量", "D");
// 手動計算今日漲幅
if refPrc > 0 then
gainToday = (Close - refPrc) / refPrc * 100
else
gainToday = 0;
if gainToday > 3.0 then
isGainMatch = true
else
isGainMatch = false;
if volToday > 2000 then
isVolMatch = true
else
isVolMatch = false;
// ==========================================
// 3. 創高條件:目前股價等於當日最高價
// ==========================================
highToday = GetField("最高價", "D");
if Close = highToday then
isHighestPrice = true
else
isHighestPrice = false;
// ==========================================
// 4. 籌碼沉澱條件:過去 20 天從來沒有單日漲超過 2%
// ==========================================
// 警示腳本無「漲跌幅」欄位,需利用日線收盤價迴圈手動計算
isQuietPast = true; // 預設為沉寂,只要抓到一天漲幅過大就判定失敗
for i = 1 to 20 begin
// 計算過去第 i 天的漲幅:(第i天收盤 - 第i+1天收盤) / 第i+1天收盤 * 100
if GetField("收盤價", "D")[i+1] > 0 then begin
pastGain = (GetField("收盤價", "D")[i] - GetField("收盤價", "D")[i+1]) / GetField("收盤價", "D")[i+1] * 100;
// 若過去20天內有任何一天單日漲幅大於 2%,則不符合沉寂條件
if pastGain > 2.0 then
isQuietPast = false;
end;
end;
// ==========================================
// 綜合篩選與觸發
// ==========================================
if isTimeMatch and isGainMatch and isVolMatch and isHighestPrice and isQuietPast then
begin
ret = 1;
// 警示腳本專屬推播語法:利用 retmsg 將即時數據推送到手機或電腦通知
retmsg = "尾盤突擊!量:" + NumToStr(volToday, 0) + "張, 漲幅:" + NumToStr(gainToday, 2) + "%";
end;
這次編譯就過了,沒有任何問題了
而且Gemine自己會整理這些錯誤的部份,以下是它的回應
這三個痛點完全切中警示腳本(Strategy Radar)最常遇到的實戰地雷:
-
daily字串污染:連變數名稱的部分字串都不能碰到daily,必須徹底改名(例如改成volToday、highToday)。 -
漲跌幅欄位不支援:警示腳本中不支援直接呼叫漲跌幅,必須老老實實用(今日收盤 - 昨日收盤) / 昨日收盤 * 100來手動推算。 -
沒有
OutputField:警示腳本是盤中即時觸發的,沒有選股清單那種九宮格欄位,如果要在觸發時看到資訊,必須改用retmsg(回傳訊息) 來推播文字
實戰修正亮點
-
變數大掃除:徹底消滅了所有含有
daily的變數,改為highToday、volToday等安全命名。 -
手寫迴圈算漲幅:在
condition 4中,我們用了一個完美的for迴圈,往前推算 20 天的日線收盤價GetField("收盤價", "D")[i]。一旦發現過去某天漲幅超過 2%,isQuietPast就會直接變成false。 -
完美替代
OutputField:腳本最後使用了retmsg搭配NumToStr(數值轉字串函數),這樣當條件觸發時,您的 XQ 警示彈窗或手機 APP 推播,就會直接顯示**「尾盤突擊!量:2500張, 漲幅:3.15%」**,連切進去算都不用算!
這樣就完成了一個警示雷達的腳本,而Gemine也學會了寫XSCRIPT裡的一些語法
















