【單元4】PowerLanguage的基本構成元素
如果把寫交易程式比喻成”樂高積木”,上一篇「PowerLanguage的基本運作規則」我們介紹了這套積木的玩法,接下來這篇要讓讀者先瀏覽一遍有哪些不同樣式的積木可以拼,也就是來認識PowerLanguage的基本元素以及重要的語法保留字,這樣可以幫助我們很快地可以依著範例(積木成品示範圖),先能快速寫一些基本交易策略(學會拼完整一些簡單的積木成品),不僅增強信心,能先寫出一隻策略,接著績效回測、調整乃至於小規模上線自動交易,如此完整跑過一次,也有助於快速對程式交易建立一個概觀,之後再透過不斷地實作與觀摩,就能漸漸掌握PowerLanguage語法開發各種交易指標或策略。

拆解程式碼看結構與元素

標點符號
標點符號 |
功用 |
; |
分號:每一行程式碼的結束就是用分號。 |
: |
冒號:用的機會很少,幾乎就是宣告變數或參數時派上用場。 |
() |
小括號:在宣告參數或變數時小括號內為預設值及預設型態;在運算式時,小括號的用法也跟我們一般用法一致,例如:(close+high)/2 |
[] |
中括號:變數或保留字後面加中括號為取前值的意思,例如High[1]為取前一根K棒高點。 |
{} |
大括號:兩個大括號間的程式碼在執行腳本時會略過,可以用來做一些註記或是程式打草稿或修訂之用。 |
// |
雙斜線:主要是用來短註記用,在執行腳本時會略過雙斜線後面的文字,放在程式碼的每一行之後(分號之後),可以簡短註記一些說明,以利後來或是他人理解程式碼的要點。 |
參數/變數
- 參數(Inputs):範例中的MACD訊號我們宣告了3個參數,括弧內的數值為該參數的預設值,讀者有沒有很眼熟,正是我們常常使用的MACD的3個大眾參數(12,26,9)。
- 變數(Variables):變數用途很廣,也有各種不同類型的變數。變數宣告後可以任意引用,更多時候是為了更有效率寫程式或運算所創造出了的。
常用保留字(關鍵字)
- K棒資訊相關保留字
保留字 |
功用 |
Open |
開盤價。可簡寫成「O」 |
High |
最高價。可簡寫成「H」 |
Low |
最低價。可簡寫成「L」 |
Close |
收盤價。可簡寫成「C」 |
Ticks |
分線的成交量用Ticks表示 |
Volume |
日線以上的成交量用Volumes表示 |
- 交易相關保留字
保留字 |
功用 |
Buy |
多單進場 |
SellShort |
空單進場 |
Sell |
多單出場 |
BuytoCover |
空單出場 |
Stop |
停損單 |
Limit |
限價單 |
Market |
市價單 |
Contracts/Shares |
下單口數,例如: Buy 2 Contracts next bar at market; Contracts可省略,就是預設值1口。 |
MarketPosition | 目前策略持倉部位,0是空手,1是多單,-1為空單。 |
CurrentContracts |
目前持倉口數(不論多空)。空單2口或多單2口CurrentContracts都是回傳2,因此如果要表達多單2口就要搭配MarketPosition,語法如下: MarketPosition=1 and CurrentContracts=2 |
- 繪製指標相關
保留字 | 功能 |
Plot |
繪製指標,以PlotN()表示,N為1.2.3...,可以在同一個指標腳本內同時畫多個指標,例如畫兩條長短均線: Plot1(Average(Close,5)); Plot2(Average(Close,20)); |
Red、Green、White、Blue等等 | 指定指標或線圖顏色。 |
TL_New等 | 畫趨勢線。趨勢線系列的語法運用較複雜,後有專章介紹。 |
TEXT_New等 | 在線圖上標指定文字。文字註解系列的語法運用較複雜,後有專章介紹。 |
- 介詞
保留字 |
功用 |
at |
沒有作用,亦可省略。純粹是讓程式腳本更容易閱讀。 |
on |
|
a / an |
|
of |
在PowerLanguage Editor有內建完整的保留字檢索功能,如下圖所示,可多多利用:
函式
數學運算式
運算子 |
說明 |
+ |
加 |
- |
減 |
* |
乘 |
/ |
除 |
^ |
指數(次方) |
關係運算子
運算子 |
說明 |
> |
大於 |
< |
小於 |
>= |
大於或等於 |
<= |
小於或等於 |
= |
等於 |
<> |
不等於 |
cross over |
向上穿越(黃金交叉),又可以寫成cross above |
cross under |
向下穿越(死亡交叉),又可以寫成 cross below |
其中cross over 及cross under很常用到,我們把它歸類到此,特別要留意「cross」中文解釋為「穿越」,與「>」或「<」有所區別,以我們常用到的長短兩條均線為例,cross over 其實是要同時符合當根K棒短均值大於長均值,且前一根K棒短均值小於長均值之下,而「>」或「<」符合範圍則廣的多。在實務撰寫策略時,初學者常錯用,導致條件太嚴苛或太寬,影響整個策略輸出結果。
控制流程
- If…Then…(如果符合條件就去執行A單一動作)
- If…Then Begin…End(如果符合條件就去執行A、B、C…等複數個動作)
快速結論
【警語】:
- 本文所舉之語法範例為教學之用,非提供交易策略,請讀者警慎運用。
- 自動交易如遇系統異常或斷線等問題,可能暴露更高的風險,交易人仍應檢查電腦系統或網路之狀態,特別要隨時注意部位變化,以降低相關風險。