摘要:相對于傳統(tǒng)的圖形分析,技術指標分析比較客觀。傳統(tǒng)的圖形分析有很大的爭議性,而技術指標是一個確定值,沒有多少爭論的余地。該文闡述MACD指標(MACD線、信號線)和MACD柱的計算方法及計算機實現(xiàn)。
關鍵詞:Java語言;C語言;圖形程序;MACD指標(MACD線、信號線)和MACD柱
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)36-10565-03
Java-Based Securities Trading Technical Indicators
LIN Heng-jian
(Fujian Communications Technology College Information Department, Fuzhou 350007, China)
Abstract: Compared with traditional graphical analysis, More objective analysis of technical indicators. Traditional graphical analysis are of great controversy,Technical indicators are a definite value, Do not be controversial.In this paper, MACD indicators (MACD line, signal line) and MACD columns in the calculation and the computer implementation.
Key words: Java language; C language, graphics program; MACD indicators (MACD line、signal line) and MACD column
一位成功的交易者對于市場的了解程度,必須超過交易對手,使用計算機編寫技術指標并利用它進行交易可以讓你進行更透徹的分析。計算機可以協(xié)助你深入追蹤與分析更多的市場,處理更多的信息,處理例行的事務,讓你有更多的時間與精力從事思考,可以讓你運用更多的指標,掌握更多的交易機會。交易最終是一場信息的游戲。
相對于傳統(tǒng)的圖形分析,技術指標分析比較客觀。某個走勢圖是否出現(xiàn)“頭肩底”形態(tài),使用傳統(tǒng)的圖形分析,不同的人會有不同的看法,相對而言技術指標計算出來的值是確定的,沒有多少爭論的余地。
1 技術指標的分類、各類指標的適用范圍
技術指標一般分為三大類:趨勢跟隨指標、擺蕩指標與復合指標。趨勢跟隨指標適用于趨勢明顯的行情,在橫向走勢中,它們所提供的信號并不理想甚至是非常危險的,該類指標屬于同步或滯后指標。振蕩指標適用于捕捉橫向走勢中的轉折點,當行情開始呈現(xiàn)趨勢,它們所提供的信號并不準確甚至是危險的,該類指標屬于領先或同步指標。復合指標主要是反映交易者的心理方面有獨特的作用,該類指標屬于領先或同步指標。
本文重點討論的MACD(Moving Average Convergence-Divergence,)指標與MACD柱屬于趨勢跟隨指標。
2 MACD指標(MACD線、信號線)和MACD柱的計算方法及實現(xiàn)。
最初的MACD指標是由兩條曲線構成:一條紅線(又叫MACD線、快線)與一條黃線(又叫信號線、慢線)。MACD線由兩條EMA相減獲得,它對于價格變動的反應比較敏感。信號線是MACD線經(jīng)過指數(shù)平滑之后的另一條EMA。它對于價格變動的反應比較緩慢。 當快速的MACD線穿越慢速的訊號線,即代表買進與賣出的訊號。
MACD指標(MACD線、信號線)和MACD柱的計算方法如下:
1) 計算收盤價的12天EMA值。
2) 計算收盤價的26天EMA值。
3) 12天EMA減去26天EMA,將此差價值繪制為紅線,這是快速的MACD線。
4) 計算快速線的9天EMA,將結果繪制為黃線,這就是信號線。
5) MACD線減去信號線所得值就是MACD柱。結果為正數(shù)畫紅線,負數(shù)畫綠線。
根據(jù)這些理論就可以編寫程序,實現(xiàn)計算機自動繪制。
2.1 交易數(shù)據(jù)的讀取分析與轉換.
在繪制MACD指標(MACD線、信號線)和MACD柱之前,首先要解決交易數(shù)據(jù)的讀取和轉換。先從證券公司的網(wǎng)站上下載交易數(shù)據(jù),因為不知道數(shù)據(jù)格式嘗試使用Java語言和C語言的不同類型讀取分析:
使用Java語言int類型讀取數(shù)據(jù)按16進制數(shù)輸出:
cb1e3001 983a0000 c43b0000 8a340000 b0360000 caac0300 22910200 00000000 01000000 40548900 895440 ce1e3001 84350000 84350000 72330000 cc330000 87ad0000 a9800000 00000000 01000000 40548900 cf1e3001 7c330000 3a340000 00320000 64320000 399e0000 56790000 00000000 01000000 40548900
使用C語言long類型讀取數(shù)據(jù)按16進制數(shù)輸出:
1301ecb3a98 3bc4 348a36b0 3acca 29122 0 1 1301ece 3584 3584 3372 33cc ad87 80a9 0 1 895440 1301ecf 337c 343a 3200 3264 9e39 7956 0 1 895440
分析以上數(shù)據(jù)得出Java語言int類型和C語言long類型均占四個字節(jié),字節(jié)的存儲順序相反。
使用C語言long類型讀取數(shù)據(jù)按10進制數(shù)輸出:
19930827 15000 15300 13450 14000 240842 168226 0 1 9000000 19930830 13700 13700 13170 13260 44423 32937 0 1 900000019930831 13180 13370 12800 12900 40505 31062 0 1 9000000
經(jīng)過分析發(fā)現(xiàn)交易數(shù)據(jù)是使用C的long類型寫到文件中.使用下列Java代碼完成交易數(shù)據(jù)的存儲格式轉換:
/**
* Int_C2Java
* 將C語言通過long類型寫到文件中的二進制數(shù),Java語言使用int類型讀出
* @param i int Java 的int型和C的long型都占4字節(jié) 所以Java使用int類型讀取
* @return int因為存儲順序相反,讀取的 字節(jié)1、字節(jié)2、字節(jié)3、字節(jié)4轉換為相反順序即字節(jié)4、字節(jié)3、字節(jié)2、字節(jié)1返回
*/
public int Int_C2Java(int i) {
return (((i 0X000000ff) << 16) + ((i 0X0000ff00) << 8) +
((i 0X00ff0000) >> 8) +
((i 0Xff000000) >> 16)
); }
通過以上分析和計算完成交易數(shù)據(jù)的讀取。
2.2 快速MACD線,信號線,MACD柱的計算機實現(xiàn)
/** 計算快速MACD線,信號線,MACD柱,n1、n2、n3可使用 12 、26 、9 組合或5、34、7組合。
* @param n1 intn1天指數(shù)移動平均線
* @param n2 intn2天指數(shù)移動平均線
* @param n3 int快速線的n3天指數(shù)移動平均線
*/
void MACDData(int n1, int n2, int n3) {
//當日ema 昨日ema
float ema = 0, emaYest = 0;
int i, j = 1;
//writeKLNum日線數(shù)組實際寫入的數(shù)據(jù)個數(shù)
if (writeKLNum < n2 + n3) {
return;
}
setEMA(n1, EMAArray4);
setEMA(n2, EMAArray5);
for (i = 0; i < n2 - 1; i++) {
EMAArray4[i] = 0;
}
//計算快速ema線
for (i = n2 - 1; i < writeKLNum; i++) {
EMAArray4[i] -= EMAArray5[i];
}
//計算慢速信號線
for (i = n2 - 1; i < n2 - 1 + n3; i++) {
emaYest += EMAArray4[i];
EMAArray5[i] = 0;
}
emaYest /= n3;
//慢速信號線
EMAArray5[n2 - 1 + n3 - 1] = emaYest;
for (i = n2 - 1 + n3; i < writeKLNum; i++) {
ema = EMAArray4[i] * 2 / (n3 + 1) + emaYest * (n3 - 1) / (n3 + 1);
EMAArray5[i] = ema;
emaYest = ema;
}
//計算MACD柱
for (i = n2 - 1 + n3; i < writeKLNum; i++) {
EMAArray6[i] = EMAArray4[i] - EMAArray5[i];
}
}
3 MACD指標和MACD柱的交易法則
MACD線與信號線之間的穿越,可以反映市場潮流的變動。順著穿越方向交易,相當于是順著潮流前進,相對于使用單一移動平均線的交易方法來說,這套系統(tǒng)所提供的交易信號較少,信號反復的可能性也比較小,比移動平均線更能反映市場的真實情況。
1) 當快速的MACD線由下往上穿越慢速的信號線,這是買進信號,進場建立多頭部位,停損設定在最近的次要低點下方。
2) 當快速的MACD線由上往下穿越慢速的訊號線,這是賣出訊號,進場建立空頭部位,停損設定在最近的次要高點上方。
相對于價格與單一均線的穿越訊號,這套方法比較能夠掌握主要的趨勢,也比較不會產(chǎn)生反復的訊號。
MACD可以提供兩類的信號,一是每天都發(fā)生的普通信號,另一種信號相當罕見,任何市場每年可能僅有幾次,但這是強烈的訊號。 普通訊號是由MACD柱狀圖的斜率決定。如果目前的柱狀高于前一支柱狀,斜率向上,代表多頭力量轉強,適合買進或做多。如果目前的柱狀低于前一支柱狀,斜率向下,代表空頭力量轉強,適合賣出或放空。如果價格朝某個方向移動,而MACD 柱狀圖朝價格趨勢另一個方向移動,代表市場主導力量的熱忱正在冷卻中,實際價格趨勢弱于盤面表現(xiàn)。
MACD柱狀圖適用于任何的時間周期:周線圖、日線圖與盤中走勢圖。周線圖信號所代表的意義將大于日線圖與盤中走勢圖。這個原則適用于任何的技術指標——越長期時間周期的訊號,它所代表的意義越重要。
當你根據(jù)周線圖分析MACD與MACD柱狀圖,信號的判斷必須每天進行。主要的趨勢變動可能發(fā)生在任何時候。所以,你每天都必須研究周線圖。
4 總結
通過使用計算機實現(xiàn)MACD指標和MACD 柱狀圖能進一步理解這些指標的含義,更好的遵循相應的交易規(guī)則。
參考文獻:
[1] Deitel H M,Deitel P J,Santry S E.高級Java2大學教程[M].北京:電子工業(yè)出版社,2003.
[2] Arnold,Gosling,Holmes.Java編程語言[M].3版.北京:中國電力出版社,2003.