XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;visibility:hidden">

【單元5】PowerLanguage常用函式(Function)

點我,看更多程式交易教學https://www.pfcf.com.tw/eventweb/multicharts/

在上一個單元我們認識了PowerLanguage的構成要素常用保留字以及運行邏輯等,我們已經初步準備好開始寫程式,要更快、更精準完成程式腳本,一定要善加運用函式。本章目的是介紹初學者認識最常用的內建函式,並以範例示範運用方式,至於自己編寫函式部分我們會在後面章節介紹。學保留字就像學英文單字,而學函式就像學英文片語,一樣沒巧門,基本的先背起來,日後多看多學,自然熟能生巧應用自如。

>>讀完本文您可以學到什麼?
1.認識什麼是函式
2.學會使用最常用的函式

什麼是函式(Function)

函式(或稱函數)是把常用的或複雜的運算式、判斷式另外寫成腳本,以提供隨時可以呼叫運用,例如計算平均值的函式「Average」我們只要指定必要的參數,就可以一行語法呼叫該函式把需要的平均值計算出來(函式會回傳值),而不是重頭把複雜的計算平均值的算式演算一遍。PowerLanguage內建許多實用的函式例如數學或統計用的,或是計算技術指標值,大為提高程式撰寫的便利性,交易人也可以自己寫函式,例如判斷結算日的函式,作為其他策略腳本隨時呼叫之用。

必學常用函式

Average(Price,Length)
  • 說明:計算平均值
  • 參數:

Price:要計算平均值的標的,可以是Open、High、Low、Close、Volume或自訂一變數等等。

Length:指定取近幾筆資料來計算平均,5就是算最近5個值來平均,以此類推。一如我們在之前提過MultiCharts/PowerLanguage的腳本運行是採時間序列的概念,每一根K棒就是一筆資料或運算值,這裡函式運算設定之Length就是指定運算最近期一定長度(或是理解為K棒數)的資料。

  • 範例:以下程式碼可以畫出簡單移動平均線   

Value1 = Average(Close,9);
Plot1(Value1, "AvgClose");​​    
   

  • 同類函式:Average(Price,Length)也可以用AverageFC(Price,Length)取代,後者在演算上比較有效率。此外相關的函式還有Xaverage(Price, Length) ,計算加權移動平均值。給予越近期的值較高權重,以均線來講,會比簡單移動平均線來得敏感而貼近盤勢。
 
Summation(Price, Length)
  • 說明:加總,等於是EXCEL的SUM函式
  • 參數:

Price:要加總計算的標的,可以是Open、High、Low、Close、Volume等等

Length:幾抓近幾個值來加總,5就是算最近5個值來加總,以此類推。

  • 範例:加總最近5根K棒的成交量
Value1=Summation(Ticks,5);
 
 
Highest(Price, Length)
  • 說明:比較最近的選取最大值。
  • 參數:

Price:要比較大小的項目,可以是Open、High、Low、Close、Volume或自訂變數等等。

Length:比較的期間長度,決定要抓近幾個值(幾根K棒的值)來比較

  • 範例:以最近5根K的最高點當作空單移動停損點
If MarketPosition=-1 then BuytoCover Next Bar at Highest(High,5) Stop;
  • 同類函式:Lowest(Price,Length)則是取最小值。
 
MaxList(Value1,Value2,Value3, etc.)
  • 說明:在指定的值中取最大值,比較值以逗號隔開。Highest比較的是最近的一段連續資料,MaxList的比較值則是全賴使用者輸入/指定的特定值。
  • 參數:Value1,Value2….:通常是用來比較自訂變數。
  • 範例:例如我們想計算上影線,上影線公式為K棒最高價減去K棒實體的上邊價格(如果是紅K棒為收盤價,如果是黑K棒則為開盤價),此時我們就可以用運上MaxList函式。
Value1=High-MaxList(Open,Close);
  • 同類函式:MinList(Value1,Value2,Value3, etc.)則是取最小值。
 
CloseD(PeriodsAgo)
  • 說明:抓日線的收盤價。一般我們的主圖是用日內分線,但常需要參考日線的開高低收價格,可以此函數直接取得。但特別留意如果商品交易時間是跨日的就不適用,例如台指加了夜盤。
  • 參數:PeriodsAgo取幾天前的收盤價。
  • 範例:取前天收盤價

 CloseD(1);

  • 同類函式:其他OpenD(PeriodsAgo)、HighD(PeriodsAgo)、LowD(PeriodsAgo)用法雷同,但一樣交易時間跨日的不適用。此外,相關的函式尚有週收盤價CloseW(PeriodsAgo)、月收盤價CloseM(PeriodsAgo)、年收盤價CloseY(PeriodsAgo)等內建函式可用運。
 
CountIF(Test,Length)
  • 說明:累計過去一定K棒數中,符合特定條件的次數。此函式很實用。
  • 參數:

Test:條件敘述

Length:檢定過去K棒數

  • 範例:計算過去12根K棒中,收盤大於開盤(紅K)總數。
 Value1 = CountIF(Close > Open, 12);
 
 
LastBarOnChart
  • 說明:判斷程式執行K棒是否是最近一根K棒。在「【單元3】PowerLanguage程式腳本運作規則」中我們了解到腳本的執行是從線圖上第一根K棒開始一一執行,但如果我們希望特定動作僅在最新一根K棒才執行,LastBarOnChart就會派上用場。
  • 參數:無
  • 範例:如果希望警示音效只有在最近一根K棒才撥放
If LastBarOnChart Then
                 Condition1 = PlaySound("C:\window\ding.wav");
 
 
AvgTrueRange(Length)
  • 說明:計算平均真實區間(簡稱ATR)。真實區間的用途相當廣泛,例如用來計算停損點數等。
  • 參數:Length要計算幾個值來算平均
範例:0.5倍ATR點數停損
If marketposition=1 then 
              sell next bar at entryprice- AvgTrueRange(20)*0.5 stop;
 

其他用函式及如何查詢檢索各函式功能

此外尚有其他統計/數學類型的函式,列舉如下:
函式 用途
Absvalue(Value) 計算絕對值
Correlation(Indep,Dep,Length) 計算相關係數
StdDev(Price, Length) 計算標準差

 

更為常用指標類型的函式,我們也列舉一些,建議可以參考內建指標或訊號,或是參考相關說明文件,觀摩這些函式是怎麼運用:

函式 用途
ADX(Length) ADX指標
BollingerBand(Price, Length, NumDevs) 布林通道指標
MACD(Price, FastLength, SlowLength) MACD指標
Parabolic(AfStep) SAR指標
Stochastic(PriceH, PriceL, PriceC, StochLength, Length1, Length2, SmoothingType, oFastK, oFastD, oSlowK, oSlowD) KD指標

結論與練習

我們在之前單元中介紹過以兩行程式碼寫均線交叉策略,也是運用簡單的保留字及函式即可辦到,隨著讀者看過、記憶過的保留字及函式越來越多,就越能快速準確將腦海中的交易邏輯化成程式腳本。多練習範例是進步不二法門,這邊再出兩個練習題,讓大家動動腦:

1.如何畫出高低通道指標(最近5根K棒最高及最低點連線所形成的上下通道)?

2.如何畫出凱勒通道指標(Keltner Channel)?提示:凱勒通道公式為一條移動平均線上下加減N倍ATR(Average True Range)

【警語】:

  1. 本文所舉之語法範例為教學之用,非提供交易策略,請讀者警慎運用。
  2. 自動交易如遇系統異常或斷線等問題,可能暴露更高的風險,交易人仍應檢查電腦系統或網路之狀態,特別要隨時注意部位變化,以降低相關風險。

點我,看更多程式交易教學https://www.pfcf.com.tw/eventweb/multicharts/

期貨線上開戶 期貨營業員專區
/統一期貨相關連結/
選擇權工具箱選擇權工具箱股票期貨工具箱
亞股指數工具箱程式交易工具箱期貨學起來
統一期貨FB統一期貨YouTube統一期貨LINE統一期貨IG