PowerLanguage 建立策略完整教學:從零開始寫你的第一支交易策略

想用 MultiCharts 做程式交易,第一步就是學會用 PowerLanguage 撰寫策略。本文將從 PowerLanguage Editor 的基本操作開始,一步步帶你建立、編譯、掛載策略,到最後的回測與優化。

PowerLanguage 是什麼?

PowerLanguage 是 MultiCharts 內建的程式語言,專門用來撰寫交易策略。它的語法設計接近英文口語,即使沒有程式設計背景也能快速上手。

特點說明
語法簡單接近英文口語,如 Buy next bar at market;
相容 EasyLanguage與 TradeStation 的 EasyLanguage 高度相容
三種腳本類型Signal(策略訊號)、Indicator(指標)、Function(函數)
豐富內建函數超過 300 個內建函數和保留字
即時編譯寫完立刻編譯,錯誤即時回饋

前置準備

安裝 MultiCharts

群益期貨客戶可免費申請券商版 MultiCharts。申請方式請參考 MultiCharts 完整教學

開啟 PowerLanguage Editor

安裝完 MultiCharts 後,開啟方式有兩種:

建立第一支策略(Signal)

Step 1:新增 Signal

1

開啟 PowerLanguage Editor

啟動後會看到左側的 Navigator(導航列)和右側的程式碼編輯區。

2

新增訊號

選單 → File → New → Signal(訊號)。輸入名稱,例如「My_First_Strategy」。

3

撰寫程式碼

在編輯區輸入策略程式碼(下面有範例)。

4

編譯

按下 F7 或點選工具列的「Compile」按鈕。如果沒有錯誤,底部會顯示「Compilation successful」。

Step 2:範例策略——雙均線交叉

這是最經典的入門策略,當短期均線上穿長期均線時買進,下穿時賣出。

// 雙均線交叉策略
// My_First_Strategy

Inputs:
  FastLength(5),    // 短期均線週期
  SlowLength(20);   // 長期均線週期

Variables:
  FastMA(0),
  SlowMA(0);

// 計算均線
FastMA = Average(Close, FastLength);
SlowMA = Average(Close, SlowLength);

// 進場條件
If FastMA Crosses Over SlowMA Then
  Buy next bar at market;

If FastMA Crosses Under SlowMA Then
  SellShort next bar at market;

程式碼解析

程式碼說明
Inputs:宣告可調整的參數(名稱和預設值)
Variables:宣告變數(名稱和初始值)
Average(Close, N)內建函數,計算 N 根 K 棒的收盤價平均(SMA)
Crosses Over上穿(FastMA 從下方穿越到上方)
Crosses Under下穿(FastMA 從上方穿越到下方)
Buy next bar at market;在下一根 K 棒的開盤以市價買進
SellShort next bar at market;在下一根 K 棒的開盤以市價放空

掛載策略到圖表

編譯成功後,需要把策略掛載到 MultiCharts 的圖表上:

1

開啟圖表

在 MultiCharts 中開啟你要測試的商品圖表(如台指期 TXF 5 分鐘線)。

2

插入訊號

在圖表上點選右鍵 → Insert Study → Signal。找到你的策略「My_First_Strategy」。

3

設定參數

掛載時會跳出參數設定視窗,可以修改 FastLength 和 SlowLength 的值。

4

檢視結果

掛載後,圖表上會顯示買賣點箭頭標記,表示策略運作成功。

PowerLanguage 基本語法

資料引用

語法說明範例
Open目前 K 棒開盤價Value1 = Open;
High目前 K 棒最高價Value1 = High;
Low目前 K 棒最低價Value1 = Low;
Close目前 K 棒收盤價Value1 = Close;
Volume目前 K 棒成交量Value1 = Volume;
Close[1]前一根 K 棒收盤價Value1 = Close[1];
Close[N]往前 N 根 K 棒的收盤價Value1 = Close[5];

委託指令

指令說明
Buy買進做多
Sell平多倉
SellShort賣出放空
BuyToCover平空倉
next bar at market下一根 K 棒市價成交
next bar at 20000 limit下一根 K 棒以限價 20000 成交
next bar at 19900 stop下一根 K 棒以停損價 19900 成交

條件判斷

// 基本 If-Then
If Close > Open Then
  Buy next bar at market;

// If-Then-Else
If Close > Average(Close, 20) Then
  Buy next bar at market
Else
  SellShort next bar at market;

// 多條件
If Close > Open and Volume > Average(Volume, 20) Then
  Buy next bar at market;

常用內建函數

函數說明範例
Average(Price, N)簡單移動平均Average(Close, 20)
XAverage(Price, N)指數移動平均XAverage(Close, 12)
RSI(Price, N)相對強弱指標RSI(Close, 14)
Highest(Price, N)N 根 K 棒最高值Highest(High, 20)
Lowest(Price, N)N 根 K 棒最低值Lowest(Low, 20)
StandardDev(Price, N, 1)標準差StandardDev(Close, 20, 1)
MarketPosition目前持倉狀態1=多, -1=空, 0=無
EntryPrice進場價格If Close - EntryPrice > 100 Then...
BarsSinceEntry進場後經過的 K 棒數If BarsSinceEntry > 10 Then...

進階策略範例

範例一:布林通道突破策略

// 布林通道突破策略
Inputs:
  BollLength(20),
  NumDevs(2),
  StopLoss(100);

Variables:
  UpperBand(0),
  LowerBand(0),
  MidBand(0);

MidBand = Average(Close, BollLength);
UpperBand = MidBand + NumDevs * StandardDev(Close, BollLength, 1);
LowerBand = MidBand - NumDevs * StandardDev(Close, BollLength, 1);

// 突破上軌做多
If Close Crosses Over UpperBand Then
  Buy next bar at market;

// 跌破下軌做空
If Close Crosses Under LowerBand Then
  SellShort next bar at market;

// 停損
SetStopLoss(StopLoss * BigPointValue);

範例二:RSI 超買超賣策略

// RSI 超買超賣策略
Inputs:
  RSILength(14),
  OverSold(30),
  OverBought(70);

Variables:
  MyRSI(0);

MyRSI = RSI(Close, RSILength);

// RSI 跌破超賣區後回升,買進
If MyRSI Crosses Over OverSold Then
  Buy next bar at market;

// RSI 升破超買區後回落,放空
If MyRSI Crosses Under OverBought Then
  SellShort next bar at market;

// 回中線平倉
If MarketPosition = 1 and MyRSI > 50 Then
  Sell next bar at market;

If MarketPosition = -1 and MyRSI < 50 Then
  BuyToCover next bar at market;

範例三:加入停損停利的完整策略

// 雙均線策略(含停損停利)
Inputs:
  FastLen(5),
  SlowLen(20),
  ProfitTarget(200),   // 停利點數
  StopLossAmt(100);    // 停損點數

Variables:
  FastMA(0),
  SlowMA(0);

FastMA = Average(Close, FastLen);
SlowMA = Average(Close, SlowLen);

// 進場
If FastMA Crosses Over SlowMA Then
  Buy next bar at market;

If FastMA Crosses Under SlowMA Then
  SellShort next bar at market;

// 停利停損(以點數計算)
SetProfitTarget(ProfitTarget * BigPointValue);
SetStopLoss(StopLossAmt * BigPointValue);

回測與績效分析

策略掛載後,MultiCharts 會自動進行歷史回測。查看回測報告:

  1. 在圖表上的策略名稱右鍵 → 「Format Signal」確認設定
  2. 點選「Strategy Performance Report」開啟績效報告

關鍵績效指標

指標說明理想值
Net Profit淨利潤正值
Profit Factor獲利因子(總獲利 / 總虧損)> 1.5
Max Drawdown最大回撤越小越好
Win Rate勝率因策略而異
Avg Trade平均每筆交易獲利需扣除手續費後仍為正
Total Trades總交易筆數足夠的樣本數(> 100)
Sharpe Ratio夏普比率> 1
重要提醒:歷史回測績效不代表未來表現。回測時容易產生過度擬合(Overfitting)的問題。建議使用「樣本外測試」來驗證策略的穩健性。

常見錯誤與除錯

錯誤訊息可能原因解決方法
Syntax Error語法拼寫錯誤檢查關鍵字拼寫、分號、括號
Unknown identifier變數未宣告在 Variables: 區段宣告變數
Type mismatch資料類型不符數值與字串不能混用
策略沒有交易條件太嚴格或資料不足檢查條件是否能被觸發、K 棒數量是否足夠
Missing semicolon缺少分號每個語句結尾要加分號 ;

常見問題 FAQ

不難。語法接近英文,1-2 週就能寫出簡單策略。MultiCharts 也有大量範例可以參考修改。

高度相容。絕大部分 EasyLanguage 程式碼可以直接用在 PowerLanguage,反之亦然。

需要 MultiCharts 軟體。群益期貨客戶可免費申請券商版。安裝後打開 PowerLanguage Editor 即可開始寫策略。

結論

PowerLanguage 是進入 MultiCharts 程式交易的鑰匙。從簡單的雙均線交叉策略開始,逐步加入停損停利、進階條件判斷,你就能打造屬於自己的自動化交易系統。最重要的是動手練習——理論再多,不如實際寫一支策略跑一次回測。

劉安清
劉安清

群益期貨營業員,專精 MultiCharts 程式交易與策略開發。

📌 想學更多 PowerLanguage 或申請免費券商版 MultiCharts?LINE 我!

LINE 加好友免費諮詢
LINE 諮詢