Multicharts基礎語法介紹-Powerlanguage by.程式交易 楊宗儒

認識Powerlanguage

Multicharts 的語法編輯器稱為powerlanguage,是一種用於編寫交易策略的程式語言,讓我們輕易把交易邏輯轉換成程式的語言 並透過MC回測並執行。Powerlanguage 語法簡潔易學,即使沒有程式設計經驗的人也能很快上手。

Powerlanguage 是一種用於編寫交易策略的程式語言,它由 MultiCharts 交易軟體開發。Powerlanguage 語法簡潔易學,即使沒有程式設計經驗的人也能很快上手。

Powerlanguage 組成要素

Powerlanguage 語法由以下幾個基本要素組成:

關鍵字:Powerlanguage 中內建的函數和指令,用於完成各種操作。

變數:用於儲存資料的容器。

運算符:用於進行數值運算和邏輯判斷。

控制流程語句:用於控制程式的執行順序。

內建好用的保留字

在 PowerLanguage 中已經建立好常用的內建保留字,方便直接使用:

  1. 和交易相關字例如(Buy、Sell、Stop、Limit 等)。
  2. 和K棒相關字例如(Open、High、Low、Close等)。
  3. 日期時間相關字例如(Year、Month、Date等)。
  4. 其他保留字例如(plot、entryprice等)。
  5. 內建指標函數例如(Average、BollingerBand等)。

一開始我們會宣告外部變數(Input) 這是可以從外部調整參數的函數,若我們要參數最佳化,則需要將參數宣告成input

內部的變數稱之為variable或是簡稱vars,在 var 之後給定變數名稱,並以小括號「()」宣告要代入的初始預設值

變數的種類

1. 數值

數值包含正數、負數、小數、分數等等,上方的均線程式碼宣告的變數類型就是數值。

PowerLanguage也有已經內建好的變數 value1~value99,不用宣告就可直接使用。

2. 文字串

文字串必須要用 “文字” 夾住,預設為淺綠色。因為文字無法進行數學運算,大多使用在訊息傳達。

3. 布林值

布林值為 True 與 False。 判斷 不是 True 就是 False。

和數值一樣也有內建的變數condition1~condition99,一樣不用宣告可以直接使用。像是判斷收盤價是否有大於均線,就是一個布林值的運用。

常用的關於價格的內建保留字 Open  High  Low  Close

在 MultiCharts 當中,K棒價格開高低收就是Open  High  Low  Close。大部分的技術指標也是從K棒的價格加入其他公式演變而來

關於時間的內建保留字: MonthDateTime

在寫策略的時候常使用到的判斷條件。時間可細分為年、月、日、分、時。在討論時間相關內建字之前,必須先了解在 MultiCharts PowerLanguage 的架構中,日期與時間的顯示方式。

買賣訊號的關鍵字 : buysellsellshortbuytocover

MultiCharts的買賣指令共四種,分別為多單的買進Buy和多單的平倉Sell;空單的買進SellShort和空單的平倉BuyToCover

委託指令的關鍵字:stoplimit market

market 為市價單,會立即成交

limit 為限價單,當價格來到時才會成交

stop 為觸價單,或稱為停損單

顯示持倉部位關建字:MarketPositionCurrentContracts

MarketPosition 是顯示部位方向,多單為正1,空單為負1,空手為0

CurrentContracts 是顯示自己持有的口數

執行停損停利出場內建保留字:SetStopLoss SetProfitTarget setdollartrailing  setpercenttrailing SetBreakEven  SetExitOnClose

這幾個內建保留字用意分別如下

SetStopLoss 固定停損金額 ;SetStopLoss(20000)則表示停損金額為20000元

SetProfitTarget固定停損金額;SetProfitTarget(20000)則表示停利金額為20000元

setdollartrailing 獲利回吐一定金額平倉;setdollartrailing(20000) 表示獲利從最大值回吐20000元(相當於台指期100點) 便立刻平倉

setpercenttrailing 獲利回吐一定百分比平倉;setpercenttrailing(20000,20) 表示當獲利達到20000以上 若拉回20%立即出場

SetBreakEven  獲利達到一定金額 拉回到成本價平倉 ;SetBreakEven(20000)表示當獲利超過20000元則拉會到進場價平倉

SetExitOnClose 收盤價多單或空單都立即平倉

Multicharts 完整的程式碼範例

[IntrabarOrderGeneration=true]{當根K棒內交易模式 True or False}

input: {用來設定可外部調整的參數}

var:upline(high),downline(low); {自訂變數}

{定義每天支撐壓力上下的軌道}

if date<>date[1] then begin

upline=highD(0);

downline=lowD(0);

end;

{用condition設定進場交易的時間以及開盤的漲跌幅當作濾網 }

condition1=openD(0)>=closeD(1)*m;

condition2=openD(0)<=closeD(1)*n;

condition3=time>=0900 and time<=1300 and marketposition=0 and close>upline;

condition4=time>=0900 and time<=1300 and marketposition=0 and close<downline;

{符合條件時進場作多或做空}

if condition1 and condition3 then buy next bar at market;

if condition2 and condition4 then sellshort next bar at market;

{多單的停損}

if marketposition=1 and close cross under downline then sell next bar at market;

{空單的停損}

if marketposition=-1 and close crosses over upline then buytocover next bar at market;

{當沖策略需要寫收盤前最後出場的時間}

if time>1330 and marketposition=-1 then buytocover next bar at market;

if time>1330 and marketposition=1 then sell next bar at market;

寫好策略之後按F3編譯,確定編譯成功 就可以套用到multicharts的主圖跑跑看回測的績效了。這是一個簡單的順勢突破策略

需要Powerlanguage完整懶人包請聯繫我

在powerlanguage裡面有幾個常用的基本 ,90%以上的流程控制都是用這些指令

1. if …… then……

這是最常用的指令; 如果下雨了…就要撐傘; 如果遇到紅燈…就要停車.;如果穿越10日均線就買進一口多單…..

範例  if close cross over average(close,10) then buy next bar at market…….

2. begin……end

有一個begin 就需要對應一個 end ,需要一起搭配使用 包含一至多行的陳述式

範例:

if marketposition<>0 and time>1330 then begin

  sell next bar at market

  buytocover next bar at market

end;

3. switch……case

和 if … then不同的是 switch…case  針對數值或字串比較,if … then針對布林值做比較

範例:

switch(bartype)  begin

  case1: plot1(average(c,close10));

  case2: plot1(average(c,close20));

  case3: plot1(average(c,close60));

end;

4. for…to…begin…end;

從什麼時候開始到什麼時候必須做什麼事情…..

範例:

var0 = 0 ;

for Value1 = 0 to Len – 1

begin

var0 = var0 + PriceValue[Value1] ;

end ;

Summation = var0 ;

遇到不會寫的語法,需要協助,都歡迎聯繫我