提供Script編輯器系統腳本的原始碼。程式碼分成以下幾個目錄:
- 自動交易腳本:放置的是「交易腳本類型的系統腳本」
- 函數腳本:放置的是「函數腳本類型的系統腳本」
- 指標腳本:放置的是「指標腳本類型的系統腳本」
- 選股腳本:放置的是「選股腳本類型的系統腳本」
- 警示腳本:放置的是「警示腳本類型的系統腳本」
建議安裝VSCode。
把repo複製到本機端之後, 使用VSCode, 開啟目錄即可檢視程式碼。
另外也建議安裝xs程式碼的外掛,VSCode就可以依照XS語法自動調整顯示的顏色。
本文件彙整 XQ XScript 開發過程中常見的編譯錯誤、語法限制以及最佳實踐。旨在幫助開發者快速排除 Unknown Keyword、Reserved Word 及各類邏輯錯誤。
- 變數宣告與命名規則
- 參數輸入 (Input) 限制
- 系統保留字與內建變數
- 資料讀取與頻率 (GetField)
- 繪圖與座標軸設定
- 腳本類型與指令限制
- 其他語法地雷
錯誤訊息: 變數 "Value1" 為系統保留文字
原因: 試圖宣告系統已經內建的變數。
說明: XQ 內建 Value1 ~ Value99 以及 Condition1 ~ Condition99,不需要也不能使用 Vars: 重新宣告。
// 錯誤:不要這樣寫
// Vars: Value1(0);
// 正確:直接使用即可
Value1 = Close > Open;
Vars: MyCustomVar(0); // 自訂變數才需要宣告錯誤訊息: 變數 "Oscillator" 為系統保留文字 或 目前版本不支援...
原因: 使用了指標函數名稱(如 Oscillator, MACD, RSI, K, D)作為變數名。
解法: 在名稱後加上後綴,例如 My_Osc、Diff_Val。
錯誤訊息: Input Name,Name 的內容只能 1 項
原因: Input 語法嚴格限制括號內只能有 2 個 參數:(預設值, "顯示名稱")。不支援第三個參數(說明文字)。
// 錯誤
Input: Length(20, "均線期數", "這是說明文字");
// 正確
Input: Length(20, "均線期數"); 請勿使用以下單字作為變數名稱(部分為大小寫不敏感):
價格相關:
- Open, High, Low, Close, Volume, Amount
時間相關:
- Date, Time, Week, Month, Year
交易相關:
- Position, Filled, FilledAvgPrice, Market
通用變數:
- Value1
Value99, Condition1Condition99
關鍵字:
- Input, Vars, Begin, End, If, Then, Else, Plot
錯誤情境: 在「分鐘」頻率的腳本中,想讀取「股本」、「大戶持股」等日資料。
錯誤行為: 編譯可能通過,但回測執行時報錯,或數值為 0。
解法: 務必在 GetField 中指定頻率為 "D" (日) 或其他對應頻率。
// 在 1分鐘 K線腳本中讀取股本
Value1 = GetField("最新股本", "D"); // 務必加 "D"
// 讀取昨日數據 (跨頻率)
Value2 = GetField("High", "D")[1]; // 昨天的日高點錯誤訊息: 未知的關鍵字 "xf_Highest"
原因: 使用了非官方內建的自訂函數庫(如 XScript Preset 專案),但電腦中未安裝該函數腳本。
解法: 改用內建語法組合:Highest(GetField("High","D"), 20)。
撐開 Y 軸: 若柱狀圖數值太小(如 0.5)與股價(如 100)共用座標,會看不見柱子。
- 解法 1: 設定雙座標軸(主圖用軸1,副圖用軸2)。
- 解法 2: 若需在同一個視窗,可用
PlotN(Close, "隱形線")撐開範圍,並將顏色設為背景色。
隱藏線條: 代碼中無法直接設定「隱藏」,必須在介面的「繪圖設定」中調整。
checkbox:=0:預設取消勾選(不顯示也不計算座標)。checkbox:=1:預設勾選。
不同類型的腳本支援的指令不同,混用會導致編譯失敗。
| 指令 | 選股腳本 (Selection) | 警示腳本 (Sensor) | 交易腳本 (AutoTrade) | 指標腳本 (Indicator) |
|---|---|---|---|---|
Ret = 1; |
✅ | ✅ | ❌ | ❌ |
SetPosition |
❌ | ❌ | ✅ | ❌ |
Plot1(...) |
✅ (僅顯示) | ✅ (僅顯示) | ✅ (僅顯示) | ✅ |
Filled |
❌ | ❌ | ✅ | ❌ |
常見錯誤: 在「警示腳本」中寫 SetPosition(無法下單),或在「交易腳本」中寫 Ret=1。
連鎖錯誤 (Cascading Errors): 通常 第一個 編譯錯誤才是主因。例如 Input 寫錯,會導致後面所有使用該參數的變數都變成 未宣告的變數。請先修復第一行紅字。
型態不符: If Condition1 Then... (Condition1 必須是 True/False)。避免 If Close = 100 Then... (浮點數比較危險),建議用 If Close >= 100 Then...。
分號結尾: 每一行指令結束務必加 ;。If ... Then Begin ... End; 的 End 後面也要加分號。