1. 摘要
當我們完成自動交易腳本的撰寫之後,接下來就是將此腳本轉換成自動交易的策略。這篇文章我們將會引導各位如何進行細部設定。 如果想溫習建立交易腳本,也可以參考《 XS 編輯器:交易腳本撰寫教學》。2. 自動交易策略
交易腳本編譯完畢之後,我們就可以建立一個「自動交易策略」來執行這個腳本。 建立自動交易策略的方式有兩種。 ▼第一種方式是直接在XS編輯器內,選擇交易腳本,然後按右鍵「加到自動交易」。 ▼第二種方式則是開啟「自動交易中心」,然後點選「新增」按鈕,或是從右鍵選單內選擇「新增自動交易」 要建立一個自動交易策略時,必須填入以下設定:2.1. 執行商品
決定策略要執行哪些商品。 提供的選項包含:- 指定商品:可以選擇一個或是多個商品
- 指定組合:可以選擇一個分類清單(例如我的某組自選股)
- 指定選股法:可以選擇一個XS選股法,執行前會先執行這個選股法,符合選股法的商品就會執行這個腳本
- 指定庫存:可以選擇帳號的庫存
- 指定檔案:可以選擇從外部檔案匯入欲執行的商品
2.2. 執行頻率及逐筆洗價
選擇策略執行時所讀取的商品資料頻率,有幾個選項可供選擇: 1.每一根K棒結束後執行一次。只要不勾選逐筆洗價即可。 2.價格有異動時就執行一次。勾選逐筆洗價即可 3.自動洗價。 ▼在勾選自動洗價後,就會跳出設定自動洗價運作的時段以及自動洗價間隔的部分。每次洗價間隔的部分一樣是最短為 1 秒,最長到 60 秒。 洗價的三種選項,會有 4 種運作方式,說明如下: 逐筆洗價和自動洗價皆不勾選 在這種情況下,策略的運作方式會和原本的非逐筆洗價相同。 只有在執行商品 K 棒結束後的第一次洗價,策略才會去運算已結束的那根 K 棒。 只勾選逐筆洗價 在這種情況下,策略的運作方式會和原本的逐筆洗價相同。 策略會在每次商品洗價時運算,每次運算間隔最短會相隔 0.125 秒。 只勾選自動洗價 在這種情況下,策略會在設定的間隔秒數後自動洗價運算。 不會受到商品本身是否發生成交 Tick,或是 K 棒是否結束而影響。 為了確保每根 K 棒運算結果正常,換 Bar 後的第一次自動洗價會重洗已結束 K 棒,此次洗價不會觸發警示或交易。 逐筆洗價和自動洗價皆勾選 這模式是結合「逐筆洗價」和「自動洗價」的功能。 策略除了在執行商品有新成交 Tick 進來的時候運算 (逐筆洗價規則),若在自動洗價設定的間隔秒數間都沒有 Tick 進來時,策略也會取用最後一次成交的資料自動洗價並運算。2.3. 資料讀取筆數
▼在資料讀取筆數依據策略所需K棒數來自訂。3. 交易帳號
每一個交易策略可以指定這個策略執行時要對應的交易帳號,目前共提供三種設定的方式 分別是:- 不設定交易帳號
- 設定證券交易帳號
- 設定期貨交易帳號
3.1. 不設定交易帳號
若策略不設定交易帳號,還是可以正常執行。在策略跑完資料讀取區間,以及策略部位計算區間之後,當策略收到即時行情洗價時,如果腳本呼叫了任何交易指令的話,則系統會以當時的即時行情來判斷這個交易指令是否會成交。以下我們用範例來說明判斷成交的邏輯。 假設策略目前的部位是0,然後在09:01:00秒時呼叫了SetPosition(10, 100.0),代表策略會送出一筆買進10張的委託,委託價格是100.0。 此時系統會檢視這個商品五檔委託簿的委賣資料(依照當時交易所揭示的行情),如果有任何委賣價格 <= 100.0,則依照當時的委賣數量依序成交(從最低的委賣價開始成交)。 範例#1: 產生一筆成交,價格=100.0,成交量=4,還有6張尚未成交委買量 | 買進 | 賣出 | 委賣量 |
5 | 99.5 | 100.0 | 4 |
4 | 99.0 | 100.5 | 10 |
3 | 98.5 | 101.0 | 15 |
2 | 98.0 | 101.5 | 20 |
10 | 97.5 | 102.0 | 21 |
委買量 | 買進 | 賣出 | 委賣量 |
6 | 99.0 | 99.5 | 7 |
5 | 98.5 | 100.0 | 4 |
4 | 98.0 | 100.5 | 10 |
3 | 97.5 | 101.0 | 15 |
2 | 97.0 | 101.5 | 20 |
委買量 | 買進 | 賣出 | 委賣量 |
6 | 100.0 | 100.5 | 4 |
5 | 99.5 | 101.0 | 10 |
4 | 99.0 | 101.5 | 15 |
3 | 98.5 | 102.0 | 20 |
2 | 98.0 | 102.5 | 21 |
時間 | 成交價 | 單量 | 成交狀態 |
09:01:10 | 101.0 | 8 | 不成交 |
09:01:20 | 100.0 | 2 | 產生一筆成交成交價=100.0, 成交量=2 (剩餘8張) |
09:01:30 | 99.5 | 3 | 產生一筆成交成交價=99.5, 成交量=3 (剩餘5張) |
09:01:40 | 99.5 | 10 | 產生一筆成交成交價=99.5, 成交量=5 (全部成交,剩餘0張) |
- 目前僅支援證券帳號、期貨帳號。複委託帳號以及群組帳號尚未支援
- 目前僅支援可以透過XQ全球贏家手機版交易的券商,以確保自動交易執行時可以透過手機做完整的監控以及管理
3.3. 下單設定
商品限制 如果策略指定證券交易帳號的話,則在啟動策略時系統會檢查策略的執行商品,如果其中有非證券類型的商品的話,則這些商品會被略過不予執行。 ▼XQ自動交易中心帳號設定 選擇:現股交易/信用交易 選擇現股交易:系統會依照這個帳號的現股庫存數量,以及買賣方向來決定委託單的內容。買進時會送出現股買進,賣出時會送出現股賣出或是現股先賣(當沖)。 選擇信用交易:系統會依照這個帳號的融資/融券庫存數量,以及買賣方向來決定委託單的內容。買進時可能會送出買進融券(回補)或是買進融資委託,賣出時可能會送出賣出融券或是賣出融資的委託。 選擇:ROD/IOC(決定委託單的委託條件) 決定委託單送出的類型是ROD或是IOC。 由於IOC委託會有不成交則被自動取消的限制,所以當系統發現IOC委託被取消時,會自動修正策略的Position數值。 舉例:目前Position = 0,接下來執行了SetPosition(1),策略選擇要用IOC來下單。 當策略執行到SetPosition(1),系統會送出一筆買進1張的IOC委託單,同時下一次洗價時Position會被改成1。 如果這一筆IOC委託成交:下一次洗價時Filled會變成1。 如果這一筆IOC委託沒有成交:由於交易所會自動取消這一筆委託單,所以系統在收到取消通知之後,會自動把Position改成0。會自動調整Position是因為目前已經沒有有效的委託單,所以這個策略的Filled永遠不會變成1,也就會造成Position跟Filled永遠不會同步的情形。 請注意:目前系統尚未支援FOK的委託條件。 單邊的交易成本(%) 系統會依照交易成本的設定來調整執行時所顯示的損益數值。使用者可以依照所選擇券商的交易費用填入對應的交易成本數值。 舉例來說,假設證券手續費折數為 3 折,手續費率為 0.1425 %;交易稅率為 0.3 %,則單邊交易費用約為 0.19 %=((0.1425%*0.3*2)+0.3%)/2 交易回報等待時間 此項設定為當系統送出委託時,等待券商的委託回報時間有多長。若在設定的時間內都沒有收到券商端回覆的委託成功/失敗的回報,系統將會中斷此商品的自動交易運作。 舉例來說,如果將交易回報等待時間設為30秒,且系統在 12:30:00 時產生一筆買進委託送至券商的話,若自動交易中心在 12:30:30 以前都沒有收到券商回報此筆委託成功或是失敗的話,系統將會強制終止該商品的自動交易運作。4. 交易帳號庫存部位整合
策略指定交易帳號之後,可以把交易帳號的庫存跟策略的部位做進一步的整合。 目前系統提供了以下四種設定及三種庫存同步方式:- 不設定
- 延續前次執行
- 自動執行有部位商品
- 與庫存同步
- 自動執行有部位的商品
- 庫存新增時自動加入執行
- 庫存異動時自動同步數值
- 依腳本計算
4.1. 選擇:不設定
在這種模式底下,策略啟動時, 初始部位是空的。4.2. 選擇:延續前次執行
若執行商品的來源為「選股中心」或者 「指數成分股」這類每天選出會異動的選股,則適合使用這個模式。 下方有個「自動執行有部位的商品」選項打勾,則庫存中的商品會被加入到執行清單中執行。4.3. 選擇「與庫存同步」
策略在執行完歷史資料區間之後,系統會依照當時帳號的庫存,自動調整策略的部位,以及策略的未平倉成本。適合自動交易策略啟動下還需要手單加碼、減碼、平倉部位的操作 在「與庫存同步」設定下有三個與庫存同步的選項可供打勾,分別為:- 「自動執行有部位的商品」:將庫存中的商品都納入執行商品清單中進行交易。
- 「庫存新增時自動加入執行」:若盤中庫存有新商品進場,則該商品也會被納入執行商品清單中進行交易。
- 「庫存異動時自動同步數值」:勾選時, 如果使用者透過其他交易管道異動執行商品的部位時, 策略會自動同步新的數量。