XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;visibility:hidden">

【單元9】從內建範例程式碼學如何運用指標函式開發策略


學完前面MultiCharts語法最基本1~8單元,我們已經有基礎可以開始進入策略開發階段。多數人交易股票或期貨都會使用技術指標,程式交易策略開發也是從技術指標出發最為簡單(簡單不等同較差),在MultiCharts裡面已經有內建需多常用指標寫的交易策略範本,我們可以先從這些範本學習這些指標寫是如何寫成程式語法。
 
 
>>讀完本文您可以學到什麼?
1.從內建指標或訊號程式碼學更多函式運用
2.開發技術指標類型的交易策略

開始寫策略前的準備與溫習

本文我們正式進入交易策略撰寫,這第一步是教大家先從內建的指標或策略切入,在開始之前,我們再提醒初學的讀者確認前面單元1~7的寫程式基礎都已經學會或是建議再次複習:
 

內建指標或訊號提供大量範本:以MACD為例

對於PowerLanguage初學者而言,很大的困擾就是不知該怎麼用程式表達想要達到的功能或計算,有些最基本的函式如Average、Highest等,學習別無他法,先背起來再說,但例如想以MACD指標來作為交易訊號,遇到第一個難題就是用什麼程式碼來計算(表達)MACD各項值,其實最簡單的方式就是直接參考PowerLanguage內建的訊號或指標範例。
 
我們開啟PowerLanguage Editor內建的「MACD」指標,程式碼如下:
 
==========================================
inputs: FastLength( 12 ), SlowLength( 26 ), MACDLength( 9 ) ;
variables: var0( 0 ), var1( 0 ), var2( 0 ) ;
 
var0 = MACD( Close, FastLength, SlowLength ) ;
var1 = XAverage( var0, MACDLength ) ;
var2 = var0 - var1 ;
 
Plot1( var0, "MACD" ) ;
Plot2( var1, "MACDAvg" ) ;
Plot3( var2, "MACDDiff" ) ;
Plot4( 0, "ZeroLine" ) ;
===========================================
 
了解MACD的交易人都知道MACD指標共畫三條線:快線(DIF)、慢線(MACD)、柱狀線(DIF-MACD),對照一下上面MACD指標程式碼應該不難猜到var0=快線、var1=慢線、var2=柱狀線,從程式碼可以清楚以「MACD」及「Xaverage」這兩個函式來計算MACD指標值。因此再進一步舉例,假設想要幫之前介紹過的均線交叉策略加一個濾網,也就是MACD柱狀線在零軸以上才做多的,反之只做空,程式碼就可以寫成:
 
===========================================
inputs:Len1(5),Len2(20);
Vars:MA1(0),MA2(0),var0(0),var1(0),var2(0);
 
MA1=Average(close,Len1);
MA2=Average(close,Len2);
var0 = MACD( Close, 12, 26 ) ;
var1 = XAverage( var0, 9 ) ;
var2 = var0 - var1 ;
 
If var2> 0 and MA1 cross over MA2 then Buy next bar at market;
If var2< 0 and MA1 cross below MA2 then SellShort next bar at market;
===========================================
 
上面這個例子就是示範如何從PowerLanguage內建的指標或訊號範例去複製各個函式的引用方式,其他如KD、RSI、SAR等等都以此類推。
 
有興趣的讀者可以再開啟MACD相關的內建訊號範例,就可以學到如何用MACD建構交易訊號:
 
 
以上,我們示範了如何模仿內建函式快速上手寫交易策略,MultiCharts內有內建多種訊號腳本,並且把多與空、進場與出場分開,識別如下:
xxxx LE=Long Entry 多單進場
xxxx SE=Short Entry 空單進場
xxxx LX=Long Exit 多單進場
xxxx SX=Short Exit 空單出場

舉例二:內建KD指標(Stochastic Slow)

前一例的MACD是比較簡單的函式,內建程式碼短短幾行,一眼可以推敲出如何引用相關函式,KD指標則是比較複雜。MultiCharts內收錄多種不同KD指標,一般國內投資人多看慢速(Slow)KD,我們打開內建訊號「Stochastic Slow LE」程式碼如下:
 
===========================================
inputs: Length( 14 ), OverSold( 20 ) ;
variables: var0( 0 ), var1( 0 ), var2( 0 ), var3( 0 ) ;
 
Value1 = Stochastic( H, L, C, Length, 3, 3, 1, var0, var1, var2, var3 ) ;
 
condition1 = CurrentBar > 2 and var2 crosses over var3 and var2 < OverSold ;
if condition1 then Buy ( "StochLE" ) next bar at market ;                             ===========================================
 
在內建訊號腳本中常會看到CurrentBar > 2 或CurrentBar > 1的條件限制,我們可以把它理解成為一個防呆的作用,其實可寫也可不寫。上面腳本關鍵就是Stochastic這個函式,這是一個會回傳運算結果的函式(在後面介紹自寫函式的單元我們會說明),它會回傳4個值var0、var1、var2、var3,分別代表快速K值、快速D值、慢速K值、慢速D值。因此我們要寫KD指標相關的程式,除了內建的低檔KD黃金交叉(Stochastic Slow LE)及高檔KD死亡交叉(Stochastic Slow LE)這兩種進場方式外,也可以依樣畫葫蘆,把這段套上來就可以,例如我們寫一個抄底策略,D值低檔往上穿越20,且D值連兩天上漲,進場做多:
 
===========================================
inputs: Length( 14 ) ;
variables: var0( 0 ), var1( 0 ), var2( 0 ), var3( 0 ) ;
 
Value1 = Stochastic( H, L, C, Length, 3, 3, 1, var0, var1, var2, var3 ) ;
If var3 cross over 20 and var3>var3[1]and var3[1]>var3[2] then buy next bar at market;
===========================================
 
最後建立一項觀念,同樣的指標在不同的平台可能略為有不同的計算方式,或是受價格資料差異、取樣長度關係,常會發生期貨商軟體的技術指標讀數與MultiCharts的有所出入。不過基本上差異應該都非常小,不致影響交易判斷。
 
由於內建函式、指標及訊號名稱皆為英文名稱,有時候要找特定指標會兜不起來,例如我們熟悉的KD指標老外稱為「Stochastic」、SAR指標稱為「Parabolic SAR」等等,目前已有指標中文化可以安裝(可上凱衛MultiCharts官網了解細節),不過還是建議把指標的英文名稱學起來,以後到國外網站看程式交易相關資料才知道意思。

快速結論

就用使用EXCEL一樣,會運用的函式越多就能越快解決計算問題,對於PowerLanguage初學者而言,能盡量多研究並掌握內建函式,寫程式就能較快上手,許多想要達到的功能或計算,只要把適當的函式抓進來用,就可以大幅減輕寫程式的負擔。
 
MultiCharts除了基本的運算函式外,內鍵許多常用交易策略跟指標,初學者可以先把這些當成範本,先學會常見指標或策略的程式語法怎麼寫,試著結合自自己的看盤指標,寫出自己的交易策略。
 
 
 

【警語】:

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

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

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