以下文章參考:HTS[4000] 實現 EMA 均線、均線扣抵、BIAS 乖離
每一天除了利用 "My Notes Keeper" 紀錄看盤心得與各大指數線圖 (Dow, Nasdaq, 臺股加權, 摩台)外,也會將台股加權指數,利用噴墨印表機印出一張 A4 的日線圖。 以俾三不五時可以看看線圖、培養大局觀。
印出來的日線圖儘量不要繁雜,最主要的資訊就是 均線 與 成交量。 均線我偏好使用 (EMA Exponential Moving Average) 指數平滑移除平均線。 另外我也希望透過 扣抵值 來觀看扣抵區間內的均線轉折情形。 可惜,對於 EMA 的扣抵計算,我根本不會,似乎相當地複雜。 所以在此我僅利用一般 MA 的扣抵計算方式,只是作個參考而已。
再來,我也想觀察指數收盤價與各條均線的差距,也就是一般所稱之為的乖離。 參考「趨勢生命力」一書,P.146 中指出: 「若股價與五日線的乖離率達 3% 以上,短線上就有拉回會反彈的可能;若以月線來看則是 8% 上下、季線則是 10% 上下。」
參考上圖的乖離,今日 (2009/04/06) 大盤的收盤指數 5556, 其月乖離 (20日, N3)達 7.42、季乖離 (60日, N4)更高達 13.95。 看來短線似乎過熱,近日應會有回檔修正。
在 HTS [4000] 系統交易內,實現這些指標相當簡單。 程式碼參考如下:
EMA 六條均線與扣抵值:
Parameters : Price(Close), Display(4), Len1(5), Len2(10), Len3(20), Len4(60), Len5(120), Len6(240), ViewCut(1) Variables: EMA1(0),EMA2(0),EMA3(0),EMA4(0),EMA5(0),EMA6(0),
str1(""),str2(""),str3(""),str4(""),str5(""),str6("") EMA1 = MAFC( Price, Len1)
EMA2 = MAFC( Price, Len2)
EMA3 = MAFC( Price, Len3)
EMA4 = MAFC( Price, Len4)
EMA5 = MAFC( Price, Len5)
EMA6 = MAFC( Price, Len6) If Round(Display,0) <= 1 Then
Draw1( EMA1, "EMA 1")
ElseIf Round(Display,0) = 2 Then
Draw1( EMA1, "EMA 1")
Draw2( EMA2, "EMA 2")
ElseIf Round(Display,0) = 3 Then
Draw1( EMA1, "EMA 1")
Draw2( EMA2, "EMA 2")
Draw3( EMA3, "EMA 3")
ElseIf Round(Display,0) = 4 Then
Draw1( EMA1, "EMA 1")
Draw2( EMA2, "EMA 2")
Draw3( EMA3, "EMA 3")
Draw4( EMA4, "EMA 4")
ElseIf Round(Display,0) = 5 Then
Draw1( EMA1, "EMA 1")
Draw2( EMA2, "EMA 2")
Draw3( EMA3, "EMA 3")
Draw4( EMA4, "EMA 4")
Draw5( EMA5, "EMA 5")
Else
Draw1( EMA1, "EMA 1")
Draw2( EMA2, "EMA 2")
Draw3( EMA3, "EMA 3")
Draw4( EMA4, "EMA 4")
Draw5( EMA5, "EMA 5")
Draw6( EMA6, "EMA 6")
End If // 均線扣抵標示 IF LastBarOnChart AND (ViewCut=1) THEN /* Len-1 */
// 欲顯示內容
str1 = "|r|n"+"↑"+ NumToStr(Month( Date[Len1-1] ),0) +"/"+NumToStr(DayOfMonth( Date[Len1-1] ),0)+"|r|n"+NumToStr(Len1,0)+"EMA"+"|r|n"+"扣 "+NumToStr(Close[Len1-1],0)
// 顯示內容的位置
value1 = TXT_New( Date[Len1-1] , Time[Len1-1], lowest(low,Len1-1), "" )
// 顯示數值
TXT_SetString( value1, str1) str2 = "|r|n"+"↑"+ NumToStr(Month( Date[Len2-1] ),0) +"/"+NumToStr(DayOfMonth( Date[Len2-1] ),0)+"|r|n"+NumToStr(Len2,0)+"EMA"+"|r|n"+"扣 "+NumToStr(Close[Len2-1],0)
value2 = TXT_New( Date[Len2-1] , Time[Len2-1], lowest(low,Len2-1), "" )
TXT_SetString( value2, str2) str3 = "|r|n"+"↑"+ NumToStr(Month( Date[Len3-1] ),0) +"/"+NumToStr(DayOfMonth( Date[Len3-1] ),0)+"|r|n"+NumToStr(Len3,0)+"EMA"+"|r|n"+"扣 "+NumToStr(Close[Len3-1],0)
value3 = TXT_New( Date[Len3-1] , Time[Len3-1], lowest(low,Len3-1), "" )
TXT_SetString( value3, str3) str4 = "|r|n"+"↑"+ NumToStr(Month( Date[Len4-1] ),0) +"/"+NumToStr(DayOfMonth( Date[Len4-1] ),0)+"|r|n"+NumToStr(Len4,0)+"EMA"+"|r|n"+"扣 "+NumToStr(Close[Len4-1],0)
value4 = TXT_New( Date[Len4-1] , Time[Len4-1], lowest(low,Len4-1), "" )
TXT_SetString( value4, str4) str5 = "|r|n"+"↑"+ NumToStr(Month( Date[Len5-1] ),0) +"/"+NumToStr(DayOfMonth( Date[Len5-1] ),0)+"|r|n"+NumToStr(Len5,0)+"EMA"+"|r|n"+"扣 "+NumToStr(Close[Len5-1],0)
value5 = TXT_New( Date[Len5-1] , Time[Len5-1], lowest(low,Len5-1), "" )
TXT_SetString( value5, str5) end if
BIAS 乖離:
(我在 HTS 對於乖離的實做是認為只到季乖離 (60日) 就足夠了。 如果有人需要再加,只要在下述程式碼添加即可。)
// 計算短、中、長 乖離率
// writted by Kenming Wang
// date: 2005/11/07
// updated: 2009/04/06 //乖離是指當日指數與平均線之間的差距,將乖離再除以移動平均值即為乖離率。當指數離開平均線過遠時,短期內大多會呈現技術性的回檔或反彈,將股價與移動平均線的距離拉近。所以,如果能掌握市場的特性,統計出指數的乖離率變化,就能夠在行情乖離率過大時,儘早採取對應的操作策略。
//乖離率的計算公式如下:
//N日乖離率=(當日指數-N日移動平均數)÷N日平均指數 Parameters : Price(Close), Display(3), N1(5), N2(10), N3(20), N4(60) Value1 = (Price - EMA( Price, N1)) / EMA(Price, N1) * 100
Value2 = (Price - EMA( Price, N2)) / EMA(Price, N2) * 100
Value3 = (Price - EMA( Price, N3)) / EMA(Price, N3) * 100
Value4 = (Price - EMA( Price, N4)) / EMA(Price, N4) * 100 //定出中線 0
Draw1( 0, "", RED) If Display < 2 Then
Draw2(Value1, "N1乖離")
ElseIf Display < 3 Then
Draw2(Value1, "N1乖離")
Draw3(Value2, "N2乖離")
ElseIf Display < 4 Then
Draw2(Value1, "N1乖離")
Draw3(Value2, "N2乖離")
Draw4(Value3, "N3乖離")
Else
Draw2(Value1, "N1乖離")
Draw3(Value2, "N2乖離")
Draw4(Value3, "N3乖離")
Draw5(Value4, "N4乖離")
End If
沒有留言:
張貼留言