當我們透過Gem的設定,很穩定的讓Gemini幫我們寫腳本之後,最大的挑戰就是,要如何讓Gemini寫出勝率夠高,MDD可以接受的腳本,然後把這些腳本再存回Gem的知識庫中。
在機構法人及學術圈中,有一群人持續的在找有超額報酬的因子,找到了,放到交易策略中,應該是要可以提高交易策略的勝率。
XScript的自訂函數可以被作成一個因子,系統提供了因子分析的功能,讓使用者可以試著把idea變成自訂函數,然後按因子分析去看看,這個因子在不同頻率底下的報酬率分佈,這個連結有詳細的說明
例如企業價值這個因子,分成十組,各組的報酬率如下圖

如果依年度來分,報酬率如下圖

透過這些分析,我們在把因子寫成策略之前,就知道那些因子可以貢獻超額報酬,那些則可能隨波逐流。
現在我們用Gemini,也可以請它把我們的點子寫成因子
下面這是一個例子: 我想請Gemini把關鍵券商+關聯券商+三大法人的買賣超寫成一個因子,以下是它寫的腳本及它的回覆
結合「關鍵券商」、「關聯券商」與「三大法人」,等於是把大股東、地緣主力以及大型機構的動向融合成了單一的 聰明錢(Smart Money)籌碼共振因子 。
根據您的需求,以下為您進行邏輯解構與腳本撰寫:
1. 邏輯解構
- 確認執行環境:為了能在 XQ 的「選股因子分析」工具中進行十等分組(D1~D10)回測,您必須將此腳本建置為**「自訂函數 (Function)」,而非一般的選股或警示腳本。在函數腳本中,不需要寫 ret = 1;,而是要將最終計算的值直接賦予函數本身的名稱**。
- 精確欄位正名:
- 關鍵券商買賣超 $\rightarrow$ GetField(“關鍵券商買賣超張數”, “D”)
- 關聯券商買賣超 $\rightarrow$ GetField(“關聯券商買賣超張數”, “D”)
- 三大法人合計買賣超 $\rightarrow$ GetField(“法人買賣超張數”, “D”) (依照官方說明文件,此欄位即代表三大法人合計)
- Alpha 因子優化(極度重要):
如果在因子分析中只將「張數」相加,系統在做跨商品比較時,會產生嚴重的「大型股偏誤」(例如:台積電買超 1000 張的意義與中小型股買超 1000 張完全不同)。因此,身為量化開發者,我強烈建議將總買賣超張數除以當日成交量,轉化為「聰明錢買盤佔總成交量比重(%)」。這樣出來的因子分數,在十分位報表中的勝率與排序表現會優秀非常多。
2. 程式碼區塊
請在 XQ 腳本編輯器中新增一個**「函數」**,並將名稱命名為 SmartMoneyFactor(或是您自訂的名稱),然後貼上以下程式碼:
// 函數名稱:SmartMoneyFactor (若您使用其他名稱,請記得更改最後一行的變數名)
// 腳本類型:自訂函數 (Function) - 供選股因子分析使用
// 宣告變數,遵守無底線、駝峰式命名鐵律
var: keyBroker(0), affBroker(0), instBroker(0);
var: rawSum(0), volToday(0), factorScore(0);
// 取出各項主力籌碼買賣超張數 (日頻率)
keyBroker = GetField("關鍵券商買賣超張數", "D");
affBroker = GetField("關聯券商買賣超張數", "D");
instBroker = GetField("法人買賣超張數", "D");
// 計算三大主力原始合計淨買賣張數
rawSum = keyBroker + affBroker + instBroker;
// 取得當日成交量
volToday = Volume;
// 防呆機制與因子標準化 (除法保護)
// 將買超張數除以成交量作標準化,將絕對張數轉換為「主力買盤強度比重」
if volToday <> 0 then begin
factorScore = (rawSum / volToday) * 100;
end else begin
factorScore = 0; // 若當日無成交量,防呆回傳 0
end;
// 【重要】在 XScript 函數中,需將最終數值指定給「函數名稱」
// 請確保下方的 SmartMoneyFactor 與您在 XQ 中存檔的函數名稱完全一字不差
SmartMoneyFactor = factorScore;
3. 自我檢查清單 (Self-Check)
- [x] 變數命名鐵律:全數採用駝峰式(如 keyBroker、volToday),無底線,且避開了保留字 daily。
- [x] 邏輯判斷符號:判斷式使用單一等號 = 及 <>,無雙等號 ==。
- [x] 變數宣告:所有變數皆在最上方 var: 區塊賦予初始值 (0)。
- [x] 防呆與運算保護:已加入 if volToday <> 0 分母不為零防呆除錯機制。
- [x] 腳本類型差異:確認為「函數 (Function)」格式,未使用 OutputField 或 ret = 1,並正確把值指派給函數名稱。
- [x] 資料字典正名:完美匹配官方規定的 關鍵券商買賣超張數、關聯券商買賣超張數 與 法人買賣超張數。
有了這個函數後,您就可以在 XQ 的左側目錄對著這個腳本按右鍵,直接點選「因子分析」來觀察它的十分位報酬率了!
請問您是否需要我進一步幫您寫一個搭配此因子的**「選股腳本 (Screener)」**,讓您可以直接在盤後快速篩選出這個「聰明錢主力強度」大於特定門檻(例如 > 10%)的潛力爆發股?
透過這樣的流程,我們可以把點子讓Gemini寫成自訂函數,再透過XScript編輯器裡的因子分析功能,透過圖形分析,看看這個因子有沒有超額報酬,然後再把有效的因子,讓Gemini寫成勝率較高的策略,並且把這個策略存到Gem的知識庫中
這樣我們就可以累積投資智慧,逐漸形成一個有紀律的交易風格
