MultiCharts 如何執行策略#
PowerLanguage 與腳本#
策略是一行一行事先寫好的指令,這些指令使用 PowerLanguage 程式語言撰寫。 你必須使用 PowerLanguage Editor 來撰寫 PowerLanguage 指令。 撰寫完成的 PowerLanguage 指令稱為腳本(Script),腳本必須經過 編譯 才能執行 (在 PowerLanguage Editor 中按 F3 執行編譯)。 編譯會確認指令的語法是否正確,並將指令翻譯成 MultiCharts 可執行的格式。 編譯成功後,就可以在 MultiCharts 中選擇並執行寫好的腳本。
腳本類型#
在 PowerLanguage Editor 中,有三種類型的腳本: 函數、指標 和 訊號。 打開 PowerLanguage Editor -> 檔案 -> 開新檔案,選擇要撰寫的腳本類型。
| 腳本類型 | 用途 | 可執行指令 |
|---|---|---|
| 函數(Function) | 封裝可重複使用的邏輯,詳見 函數 | - |
| 指標(Indicator) | 在圖表上繪製線條(Ex: Plot),如繪製5日均線 | 繪圖指令 |
| 訊號(Signal) | 執行下單交易(Ex: Buy、Sell、SellShort、BuyToCover) | 買賣指令 |
指標腳本 與 訊號腳本 的主要差別:
- 指標腳本: 可以執行繪圖指令,不能 執行買賣指令。你可以只執行指標腳本,觀察圖表上線條的變化,再手動下單買賣。
- 訊號腳本: 可以執行買賣指令,不能 執行繪圖指令。
腳本的執行機制#
以主觀交易為例: 如果使用 2條均線黃金交叉就買進 的策略,你會一直盯著不斷接收行情的圖表,看著K棒一根一根產生,然後「不斷」檢查2條均線是否發生黃金交叉,來判斷是否買進。也許你沒有意識到,但隨著行情不斷接收,你就是在不斷地重複執行策略的邏輯。
MultiCharts 執行策略也是相同的概念: 隨著行情不斷接收,MultiCharts 會不斷地重新執行腳本。 但「不斷」並不是每一次執行結束後立刻重新執行,MultiCharts 定義了重新執行的規則,來決定何時重新執行腳本。
指標腳本 和 訊號腳本 的重新執行規則不同,以下分別說明。
指標的執行規則#
- 歷史K棒階段 (Bar by Bar): 對於過去已經完成的K棒,腳本會在每一根K棒結束時依序執行。
- 即時行情階段 (Tick by Tick): 當所有已完成的K棒都執行完畢後,進入即時行情階段。在當前K棒完成前,每收到一筆成交(tick)就重新執行一次腳本。
訊號的執行規則#
- 歷史K棒階段 (Bar by Bar): 對於過去已經完成的K棒,腳本會在每一根K棒結束時依序執行。(與指標相同)
- 即時行情階段 (Bar on Close): 當所有已完成的K棒都執行完畢後,進入即時行情階段。在當前K棒完成前,不會 重新執行腳本,需等到當前K棒完成後才重新執行。
IOG (Intra-bar Order Generation)#
訊號腳本可以透過開啟 IOG 屬性,改變即時行情階段的行為,使其與指標相同: 在當前K棒完成前,每收到一筆成交(tick)就重新執行一次腳本。
注意: 即使開啟 IOG,歷史K棒階段仍然是 Bar by Bar 執行,不會變成 Tick by Tick。
指標 vs 訊號 執行規則比較#
| 執行階段 | 指標 | 訊號 | 訊號(IOG開啟) |
|---|---|---|---|
| 歷史K棒 | Bar by Bar | Bar by Bar | Bar by Bar |
| 即時行情(當前K棒未完成) | Tick by Tick | 不執行 | Tick by Tick |
| 即時行情(當前K棒完成) | 執行 | 執行 | 執行 |
已經完成的K棒 (Completed Bars)#
在上述的執行規則中,「已經完成的K棒」是關鍵概念。以時間為單位的圖表(Ex: 分K圖)為例,K棒在滿足以下任一條件時,會被判定為已經完成:
- 收到的下一筆成交時間,超過了K棒定義的時間間隔
- 超過一定時間都沒有收到下一筆成交
第2個條件中的超時時間,指標 和 訊號 有所不同:
| 腳本類型 | 超時時間 |
|---|---|
| 指標 | 3 秒 |
| 訊號 | 300 秒 |
Reference#
https://www.multicharts.com/trading-software/index.php/How_Scripts_Work