電子信箱 service [at] bituzi.com
幣圖誌首頁 facebook粉絲團 google plus google plus

程式交易新手村-如何撰寫壓力指標?


上星期獵人介紹了什麼是壓力指標給大家,但是有人反映說,要自己把指標撰寫出來好像不容易,所以拜託獵人講解一下該如何撰寫壓力指標。如果對於上周所介紹的壓力指標還有所疑問,不知該如何下手的人,千萬別錯過今日的文章分享喔!如果你是路過的新手有興趣想要學習怎麼使用MultiCharts的話,可以先參考這篇文章 去取得試用版的MultiCharts,就可以跟獵人一起來實作了。

考夫曼的壓力指標


再來幫大家複習一下該如何計算壓力指標,如下所示:



問題來了,看完公式好像知道在說什麼,但是要轉換成程式語言,這問題可大了,怎麼說?如果你還不知道怎麼使用PowerLanguage的話,請先參考這篇文章吧!
首先,第一個會遇到的問題就是,該怎麼設定變數與參數。其實這不是太大的問題,為什麼呢?因為當你在撰寫程式的時候,可以先直接把後面主要程式寫完後,最後再回到前面把參數與變數補起來就好,所以不要在那邊苦惱要如何起手了。說了這麼多,還是趕快來解析一下上面公式該如何轉換成程式吧!
因為這部分公式是本指標的重點,所以先解釋這部分該如何撰寫。
大家可以看到第一個公式是第一個商品價格的隨機指標。從公式中可以知道,這隨機指標表示的是現在商品的價格位置在最近N根K棒高低點中的相對位置,所以隨機指標越高表示目前價格越接近最近N根K棒的最高點,反之亦然。
所以第一個公式的寫法如下:
Range1 = Highest( High, N ) - Lowest( Low, N ) ;
Stoch1 = ( Close - Lowest( Low, N ) ) / Range1 ;
Range1這個變數是用來儲存過去N根K棒的最高點減去最低點所計算出的距離,Stoch1則是計算隨機指標的寫法,應該不算太難。
不過這邊要注意一下,因為壓力指標是用在兩種商品做比較的,所以必須要算出兩種商品的隨機指標才行,而第二種商品的壓力指標就必須使用到data2的撰寫方式,所以要小心別寫錯了,如下所示:
Range2 = Highest( High of Data2, N ) - Lowest( Low of Data2, N ) ;
Stoch2 = ( Close of Data2 - Lowest( Low of Data2, N ) ) / Range2 ;
當然你要使用三種資料以上的話,還可以用data3、data4等。
講到這邊其實有個小問題,不知道大家有沒有發現,之後再一起說好了。
公式3是把Stoch1與Stoch2相減再去計算隨機指標,如下所示:
Diff = Stoch1 - Stoch2;
Range3 = Highest( Diff, N ) - Lowest( Diff, N ) ;
if Range3 <> 0 then
StressValue = 100 * ( Diff - Lowest( Diff, N ) ) / Range3 ;
對!看到問題所在了嗎?只要有除法出現,就要注意分母為0的情況,因為這有可能會讓你的程式在執行的時候會出現錯誤喔!
所以本段完整的程式碼寫法如下:
StressValue = 50 ;
Stoch1 = 50 ;
Stoch2 = 50 ;
Range1 = Highest( High, N ) - Lowest( Low, N ) ;
Range2 = Highest( High of Data2, N ) - Lowest( Low of Data2, N ) ;

if Range1 <> 0 and Range2 <> 0 then begin

Stoch1 = ( Close - Lowest( Low, N ) ) / Range1 ;
Stoch2 = ( Close of Data2 - Lowest( Low of Data2, N ) ) / Range2 ;
Diff = Stoch1 - Stoch2;
Range3 = Highest( Diff, N ) - Lowest( Diff, N ) ;
if Range3 <> 0 then
StressValue = 100 * ( Diff - Lowest( Diff, N ) ) / Range3 ;

end ;
所以大家可以看到上面有限制Range1與Range2都不能為0,不然計算可能會出現錯誤喔!如此一來,我們的壓力指標就完成了。

如何把線畫出來?


獵人以前有教過大家使用MC指標畫線最常用的指令是plotN指令,所以你要知道總共要畫幾條線,這邊我們要畫出第一個商品與第二個商品的隨機指標,以及兩個隨機指標所算出的壓力指標,最後加上三條線-超買線、超賣線還有中心線,所以我們總共要畫六條線,寫法如下:
Plot1( StressValue, "Stress" ) ;
Plot2( Stoch1 * 100, "D1 Stoch" ) ;
Plot3( Stoch2 * 100, "D2 Stoch" ) ;
Plot4( OBLevel, "OverBought" ) ;
Plot5( OSLevel, "OverSold" ) ;
Plot6( NormalLevel, "Normal" ) ;
這邊的plotN指令使用方式是plotN(想畫的東西, 名稱) ;
其中OSLevel、OSLevel、NormalLevel這三個是設定成參數可以讓大家從外部改變的。

可以回頭設定參數與變數了


所以當我們把所有後面重要程式都完成後,就可以回到最前面來設定參數與變數了。如果希望程式中可以讓我們從外部改變的數值,就可以令成參數。所以這邊要設定的參數如下:
Inputs:
N( 60 ),
OBLevel( 90 ),
OSLevel( 10 ),
NormalLevel( 50 ) ;

那程式中間有使用來儲存計算的數值,那就是參數了,
Variables:
Stoch1( 0 ),
Stoch2( 0 ),
Diff( 0 ),
Range1( 0 ),
Range2( 0 ),
StressValue( 0 ) ;

我們把最後一塊拼圖也拚上去了,所以這樣大家應該就可以把這個壓力指標給寫出來觀察了。如果已經會的讀者就看看你寫的跟獵人寫的是不是一樣,如果是初學者,相信這樣的教學應該會讓你們比較容易了解,最後合體的工作就交給各位了,真的有問題再來信詢問吧!希望這星期的分享大家會喜歡。


星期二、愛用Google+的幣圖誌朋友,立刻追蹤財經知識

0 意見: