大綱
Toggle- 認識Powerlanguage
- Powerlanguage 組成要素
- 內建好用的保留字
- 變數的種類
- 常用的關於價格的內建保留字 Open High Low Close
- 關於時間的內建保留字: Month、Date、Time
- 買賣訊號的關鍵字 : buy、sell、sellshort、buytocover
- 委託指令的關鍵字:stop、limit、 market
- 顯示持倉部位關建字:MarketPosition、CurrentContracts
- 執行停損停利出場內建保留字:SetStopLoss、 SetProfitTarget setdollartrailing 、setpercenttrailing 、SetBreakEven SetExitOnClose
- Multicharts 完整的程式碼範例
- 需要Powerlanguage完整懶人包請聯繫我
認識Powerlanguage
Multicharts 的語法編輯器稱為powerlanguage,是一種用於編寫交易策略的程式語言,讓我們輕易把交易邏輯轉換成程式的語言 並透過MC回測並執行。Powerlanguage 語法簡潔易學,即使沒有程式設計經驗的人也能很快上手。
Powerlanguage 是一種用於編寫交易策略的程式語言,它由 MultiCharts 交易軟體開發。Powerlanguage 語法簡潔易學,即使沒有程式設計經驗的人也能很快上手。
Powerlanguage 組成要素
Powerlanguage 語法由以下幾個基本要素組成:
關鍵字:Powerlanguage 中內建的函數和指令,用於完成各種操作。
變數:用於儲存資料的容器。
運算符:用於進行數值運算和邏輯判斷。
控制流程語句:用於控制程式的執行順序。

內建好用的保留字
在 PowerLanguage 中已經建立好常用的內建保留字,方便直接使用:
- 和交易相關字例如(Buy、Sell、Stop、Limit 等)。
- 和K棒相關字例如(Open、High、Low、Close等)。
- 日期時間相關字例如(Year、Month、Date等)。
- 其他保留字例如(plot、entryprice等)。
- 內建指標函數例如(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棒的價格加入其他公式演變而來
關於時間的內建保留字: Month、Date、Time
在寫策略的時候常使用到的判斷條件。時間可細分為年、月、日、分、時。在討論時間相關內建字之前,必須先了解在 MultiCharts PowerLanguage 的架構中,日期與時間的顯示方式。
買賣訊號的關鍵字 : buy、sell、sellshort、buytocover
MultiCharts的買賣指令共四種,分別為多單的買進Buy和多單的平倉Sell;空單的買進SellShort和空單的平倉BuyToCover
委託指令的關鍵字:stop、limit、 market
market 為市價單,會立即成交
limit 為限價單,當價格來到時才會成交
stop 為觸價單,或稱為停損單
顯示持倉部位關建字:MarketPosition、CurrentContracts
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 ;
遇到不會寫的語法,需要協助,都歡迎聯繫我~