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 |
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 |
// 計算短、中、長 乖離率 // 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
歷史上的今天
- 這隻螳螂(Mantis) 還挺猛的 — 免費好用的 Issue Tracking 工具 (2007)
- [備忘] HTC One Max 解鎖&Root&S-OFF (2014)
- 換購 DVD 燒錄器 ~ (2006)
- Lubuntu vim 安裝繁體中文幫助手冊 (2015)
- 2017清明節台中東海公墓七福金寶塔掃墓一日行 (2017)
- [軟件培訓] 專案開發實務操作-微型系統開發與產出 by C#.NET (06/05 週日,18 Hrs) (2011)
- 我家的螺絲們總算有好的歸宿處所了~ 3D列印螺絲收納盒 (2017)
- [推薦] 預防鳥寶夜驚的LED小夜燈 (2014)
- 案例研討-關於客戶單位維修作業流程的系統分析 (2016)
- 沒有靈感也是一種靈感 (2005)
scott
請問在 HTS [4000] 系統交易內,如何對個股畫出 EMA5 & EMA20??
CC
不知道大大是否願意分享用 “My Notes Keeper” 紀錄看盤心得,大概用什麼方式來紀錄(紀錄格式),用這一個軟體紀錄,跟用word紀錄,差異在哪裡呢??
Kenming Wang
Hello CC:
這個是屬於樹狀結構的筆記型軟體,它的格式就是 RTF 的 Word 全相容格式。
因為每個人紀錄看盤的心得是不一樣的,這就如同寫日誌一般,算起來比較是偏私秘性的東西了,所以也不方便公開。 !^^