點選右邊主選單查看更多資訊

MultiCharts PowerLanguage 語法速成:進出場指令、常用函數,寫出第一個台指期策略

一分鐘看懂

PowerLanguage 是 MultiCharts 的策略語言,寫法跟 TradeStation 的 EasyLanguage 幾乎一樣。一個策略通常分四段:參數(Inputs)、變數(Vars)、計算、下單。下單只有四個動詞:Buy(買進做多)、Sell(多單出場)、SellShort(放空)、BuyToCover(空單回補),後面接「next bar at market」這類條件。停損停利用 SetStopLoss、SetProfitTarget,參數是金額,要用點數乘上每點價值(BigPointValue)。

把「20 日均線往上穿過 60 日均線就買進、虧 300 點就停損」這句話寫成 PowerLanguage,只要十幾行。這篇用這個例子,把最常用的語法一次講完。

一個策略的四段結構

Inputs: FastLen(20), SlowLen(60), StopPts(300);
Vars: FastMA(0), SlowMA(0);

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

If CurrentBar > SlowLen then begin
    If FastMA crosses over SlowMA then Buy ("LE") next bar at market;
    If FastMA crosses under SlowMA then Sell ("LX") next bar at market;
end;

SetStopLoss(StopPts * BigPointValue);
段落這段在做什麼
Inputs參數,可以在圖表上直接改數字、也可以拿來做最佳化
Vars變數,括號裡是初始值
計算算均線,Average 是一般均線,Close 是收盤價
下單均線交叉時,下一根 K 棒開盤用市價進出場
SetStopLoss每口虧到一定金額就出場

CurrentBar > SlowLen 的意思是:K 棒數量要超過 60 根,60 日均線才算得出來,在這之前不下單。

四個下單動詞

指令意思例子
Buy買進做多Buy (“LE”) next bar at market;
Sell賣出多單(出場)Sell (“LX”) next bar at market;
SellShort賣出放空SellShort (“SE”) next bar at market;
BuyToCover買回空單(出場)BuyToCover (“SX”) next bar at market;

括號裡的文字是這筆單的名稱,回測報告會用它分辨每種進出場。

「Sell」在 PowerLanguage 裡只用來平多單,不會開空單。要放空一定要寫 SellShort,這是新手最常寫錯的地方。

下單的價格條件

寫法意思
next bar at market下一根 K 棒用市價
next bar at 45000 limit下一根 K 棒掛 45,000 的限價單
next bar at 45000 stop下一根 K 棒價格碰到 45,000 才觸發(突破單、停損單)
this bar on close這根 K 棒收盤價(回測可用,實單要小心)

this bar on close 在回測裡會用收盤價成交,但實單時,你要等收盤價出來才知道訊號,那時候已經收盤了。用它回測,結果會比實際好看,屬於「偷看未來」的一種。比較保守的寫法是一律用 next bar。

常用函數與保留字

名稱用途
Average(Close, 20)20 日一般均線
XAverage(Close, 20)20 日指數均線(EMA)
Highest(High, 20)最近 20 根的最高價
Lowest(Low, 20)最近 20 根的最低價
AvgTrueRange(14)14 日 ATR
RSI(Close, 14)14 日 RSI
MarketPosition目前部位:1 是多單、−1 是空單、0 是空手
EntryPrice進場價格
BarsSinceEntry進場後過了幾根 K 棒
BigPointValue每一點的價值,大台 200、小台 50、微台 10

停損停利的金額要乘上每點價值

SetStopLoss 和 SetProfitTarget 的參數要填「每口的金額」,填點數會出錯。以停損 300 點為例:

商品寫法實際金額
大台SetStopLoss(300 * BigPointValue)300 × 200 = 60,000 元
小台同上300 × 50 = 15,000 元
微台同上300 × 10 = 3,000 元

用 BigPointValue 寫,換商品時就不用改程式。如果直接寫 SetStopLoss(300),在大台上只代表 300 元,等於 1.5 點,一進場就會被停損。

進階:ATR 移動停損

固定點數的停損跟不上市場波動,可以改成「進場後最高價減 2 倍 ATR」:

Vars: TrailStop(0);

If MarketPosition = 1 then begin
    TrailStop = Highest(High, BarsSinceEntry + 1) - 2 * AvgTrueRange(14);
    Sell ("ATR_LX") next bar at TrailStop stop;
end;

MultiCharts 的委託只對下一根 K 棒有效,所以這段每根 K 棒都會重新計算、重新送出停損單。ATR 停損為什麼比固定點數合理,以及倍數怎麼選,可以看ATR 停損怎麼設。

寫第一個策略前先做這三件事

  1. 把規則寫成一句話:「什麼情況進場、什麼情況出場、虧多少停損」,寫不成一句話的規則,程式也寫不出來。
  2. 一律用 next bar:避免用當根收盤價成交,回測才不會比實際好看。
  3. 停損用 BigPointValue 換算:確認回測報告裡的單筆最大虧損,跟你預期的金額一致。

平台怎麼選可以看程式交易平台怎麼選,程式交易的整體流程在期貨程式交易怎麼開始。

分享你的喜愛
我愛期貨
我愛期貨
文章: 66