2016年10月8日

必學常用函式(Function)

學常用保留字就像學英文單字,而學函式就像學英文片語,一樣沒巧門,基本的先背起來,以下列出必學常用的函式及運用範例:

控制流程If…Then….

所謂寫程式換一種講法就是下指令給電腦,下指令終極語言結構就是:如果怎樣怎樣就去做甚麼動作。「If…Then…」這類控制流程就是下指令的語法,也可以說是整個PowerLanguage最重要也最常用的語言。

1.If…Then…(如果符合條件就去執行A動作)
範例:如果5MA向上交叉20MA,下根K棒就市價買進。

If average(close,5) cross over average(close,20) and marketposition<>1 then buy next bar at market;

2.If…Then…Else…(如果符合條件就去執行A動作,不符合就執行B動作)
範例:如果收盤價在20MA以上,均線(編號Plot1)顏色為紅色,反之,為綠色。

if Close > Average(Close, 20) then
SetPlotColor(1, Red)  //動作A後面沒有分號”;”
Else  //Else後面沒有分號”;”
SetPlotColor(1, Green);  //動作B後面有分號”;”作為語法結尾

3.If…Then Begin…End(如果符合條件就去執行A、B、C…等動作)
範例:如果收盤價在20MA以上,動作A,均線(編號Plot1)顏色設為紅色,動作B,發出警示。

if Close > Average(Close, 20) then begin
SetPlotColor(1, Red);  //動作A後面有分號”;”
Alert;      //動作B後面有分號”;”
End;      //End後面有分號”;”

4.If…Then Begin…End Else Begin…End(如果符合條件就去執行A、B、C…等動作,不符合就去執行D、E、F…等動作)
範例:如果收盤價在20MA以上,動作A,均線(編號Plot1)顏色設為紅色,動作B,發出警示;反之收盤價沒有在20MA以上,則動作C,均線(編號Plot1)顏色設為律色,動作D,發出警示。

if Close > Average(Close, 20) then begin
SetPlotColor(1, Red);
Alert("Close Above Average");
End         //沒有分號”;”
Else begin    //沒有分號”;”
SetPlotColor(1, Green);
Alert(“Close Below Average”);
end;

以上幾種控制流程的語法運用,簡單歸納以下要點:
1.條件都可以是複數個,用「and」或是「or」串起來。
2.要執行多個動作用If…Then Begin…End,而只執行單一動作用If…Then…。
3.注意哪些地方要用分號”;”結尾,哪些不用。

變數(Variables)與參數(Inputs)宣告

在我們這篇「2行程式碼完成均線交叉策略」中,很直觀簡略地用兩行表達均線交叉訊號的程式碼如下:

If average(close,5) cross over average(close,20) then buy next bar at market;
If average(close,5) cross below average(close,20) then sellshort next bar at market;

進一步,我們把參數與變數運用進來,把兩行程式碼升等為正規的程式腳本,完成完整的程式碼如下: 

2016年10月7日

關於K棒的基本資訊(開、高、低、收、量)

交易或是技術分析最基本的工具就是研究盤讀K線的價與量,PowerLanguage內建價量常用保留字列表如下:

運算與邏輯符號(運算子)

闡述我們的交易策略,不外乎透過數學算式、關係及邏輯來表達,例如以下這個想法「當K線收盤價大於前根K高點10點以上且收紅K就買進」,寫成PowerLanguage就是:

If Close>High[1]+10 and Close>Open then Buy this Bar at market;

其中就須運用:「+」(數學運算)、「>」(關係運算子)、「and」(邏輯運算子)。

PowerLanguage程式腳本運作原理

我們用PowerLanguage編寫的交易邏輯或是指標稱為腳本(Script),腳本完成後,接著開啟MultiCharts主程式,把腳本放到K線上去跑(新增→指標或新增→訊號)。

而MultiCharts執行PowerLanguage程式腳本依循以下原則:

1.程式腳本是從第一行開始依序執行到最後一行,因此程式碼擺得先後位置不同,特別是變數的運算,會有不一樣的結果。

2.程式腳本是從圖上第一根K棒(時間最早的)開始一根一根依序執行,且是在每根K棒收完,確認開高低收量後,完整執行一次程式腳本(如果是開IOG(IntraBar Order Generation)則是每個Tick都執行一次程式碼)。

了解PowerLanguage程式腳本運作原理非常重要。寫程式的過程看似就是把想法轉換成語法,不過很多時候明明語法都沒錯,卻沒得到預期的結果,很可能就是沒有把上面的腳本運行原則給搞清楚。

PowerLanguage 保留字(Reserved Word)及常用函式

保留字就像英文的ABC字母,是我們寫程式腳本最基本的表達字詞,在PowerLanguage Editor中保留字會以藍色字顯示,且既名為保留字,就是無論你要自設變數或函式取名都不可以跟保留字一樣。

2016年10月6日

Essential EasyLanguage Programming Guide

等等,我們學的MultiCharts不是叫PowerLanguage嗎?EasyLanguage又是啥東西?

話說EasyLanguage是TradeStation的程式語系,早期用過Tradestation2000i(TS)的交易者都知道從EasyLanguage到MultiCharts(MC)的PowerLanguage兩者語法是一脈相承,除了極少數保留字或函式略有差異以外,幾乎是一模一樣。其實多年前TS轉型為券商後,它的一組工程師跳出來發展出MC,因此可以說兩套語法根本是同一個父母。

如果你想在網路上搜尋MultiCharts程式語法相關資源,你會發現使用關鍵字「EasyLanguage」會比用「PowerLanguage」找到更豐富的資料。筆者苦尋PowerLanguage手冊(manual)未果,倒是在MultiCharts的官網找他推薦的EasyLanguage手冊。網址如下,如果你英語還可以,強烈建議學PowerLanguage前可以把這本看過一遍。

連結:Essential EasyLanguage Programming Guide