Author Archives: 發財橘子

唐安奇通道

今天要介紹一個海龜交易法很有名的指標:唐奇安通道。

這是由著名的海龜交易員Richard Donchian所發明,是一個極簡的突破策略:當價格突破通道上緣就買進做多,跌破通道下緣就賣出部位。

可以用以下的腳本畫出指標圖:

input:Period(13);
plot1(Highest(H[1], period),"通道上緣");
plot2(Lowest(L[1], period),"通道下緣" );
plot3((Highest(H, period)+Lowest(L, period))/2,"通道中線");

警示則可以寫成

input:Period(13); 
if H = Highest(H, period) then ret =1;//作多 
if L = Lowest(L,period) then ret=1;//作空

當然這樣的期數調整會視情況而定,每一檔商品可能最佳的結果也都不一樣,不過通常每個交易員都會有一個習慣的參數, 可能是月線或季線加減。 我們先看一下加上買賣點指標畫在圖上的情況,腳本加上以下的部份

Dupper = Highest(H[1], period);
DLower = Lowest(L[1], period); 
if C > Dupper then begin plot4(C*1.01 ,"作多");
 plot5(C*1.02);
 plot6(C*1.03);
 plot7(C*1.04);
 plot8(C*1.05);
 plot9(C*1.06); 
plot10(C*1.07);
 end; 
if C < DLower then begin plot11(C*0.99 ,"作空");
 plot12(C*0.98);
 plot13(C*0.97);
 plot14(C*0.96);
 plot15(C*0.95);
 plot16(C*0.94);
 plot17(C*0.93);
 end;

例如以下的例子


如果我們從2747可以看到明顯的多空分壘,當股價的波動具有足夠的趨勢性時,這樣的指標就能夠發揮最大的效用! 這幾年來簡單的突破系統由於採取極短線賺取利差的人大幅增加, 而導致假突破等"騙線"的情況越來越多,海龜交易也適應性的產生許多變形,但總結的目標就是要減少雜訊, 判斷出商品的走勢穩定性,這是在交易中相當關鍵的獲利點! 唐安其

DPO指標

DPO指標的原文是 Detrended Price Oscillator,直譯為「非趨勢價格擺盪」指標,所謂的Detrend就是「去除掉趨勢」之意,顧名思義,也就是說這個指標可以將一個股價變動的時間數列值,袪除掉其長線的趨勢方向,而只留下短線價格的波動。這個指標設計的目的似乎與大多數的指標相反,一般的指標都是想要留下趨勢的變動,而袪除掉其短期波動的雜訊

然而,這個指標要用什麼樣的方法,去除掉長期的趨勢呢?其實它用的方法一點也不新奇,就只是「短線乖離」的觀念而已。首先,對股價取一個固定期間的簡單平均線,將這條線畫在股價圖上,就如附圖1中K線上的藍色線即是。然後我們假想,如果這條籃色的線是一條可以彎曲或拉直的橡皮筋,而股價K線是固定附著在這條橡皮筋上的東西。現在我們要將這條橡皮筋以水平方向向左右兩方拉直,那麼K線的形狀就會跟著改變,這時你就會看到股價的「趨勢」不見了,只剩下依附在這條橡皮筋直線上的「短期乖離波動」。我們「將橡皮筋拉直」的這個觀念可以適用在任何採用移動平均線乖離的指標上。

不過,DPO指標又稍為加工了一下,因為光只是採用某一定期間的平均線,還難以突顯短期波動的「震盪幅度」,所以再將這條平均線向右方(附表1中是向下方)移動,而移動的距離以平均天數除以2加1來計算,所以當我們取6日平均值時,右移的距離則是6/2+1等於4,如果平均天數取7則7/2=3  餘1,餘數不論再加1,同樣是右移4天。

腳本

input: Length(10);
variable: dpo(0);

SetInputName(1, "天數");

dpo = Close - Average(Close, Length)[(Length /2) + 1];

Plot1(dpo, "DPO"); 

參考圖形

DPO

CCI指標

CCI指標的原文是 Commodity Channel Index,直譯的話就是「商品通道指標」。這個指標是由Donald R. Lamber所發明的。

這個指標的計算過程如下:

1.    先計算出典型價格:

TP t = ( 最高價t + 最低價t + 收盤價t  ) /3

2.    求算典型價格的簡單平均值:

MA t =(  TPt  +  TPt-1  + ... +  TP t-n+1 ) / n

3.    MA t 與TPt 離差絕對值的n日加總:

MD t =(|MAt-TPt|+|MAt-1-TPt-1 |+....+|MAt-n+1-TPt-n+1|)/n

4.    CCI公式:

CCI t = ( TP t-MA t ) / (  0.015 * MD t )

這個CCI公式的設計,當典型價格等於其平均值時,CCI值會等於零。所以這個公式的原始設計比較像是在使用乖離率的觀念,因為只有當最後股價在極短期內作劇烈的向上或向下運動時,CCI值才會出現突然向上或向下大幅擺盪的極端值。這個公式的發明者為了將CCI指標值限定在一定的範圍內波動,所以特別將分母部份乘上0.015的參數值。

腳本

// XQ: CCI指標
//
input: Length1(14), Length2(28), Length3(42);

SetInputName(1, "天數一");
SetInputName(2, "天數二");
SetInputName(3, "天數三");

Plot1(CommodityChannel(Length1), "CCI1");
Plot2(CommodityChannel(Length2), "CCI2");
Plot3(CommodityChannel(Length3), "CCI3");

參考圖形

CCI

ADX指標

ADX是系出DMI指標
趨向指標(Directional Movement Index)簡稱為DMI,是由技術分析大師威爾德(J. Welles Wilder)所開創出來一組技術工具。它不僅是威爾德自認為最實用的技術分析工具,同時也是深受一般技術分析師肯定的分析工具之一。DMI指標是一套在理論與實際應用上都相當複雜的技術指標
DMI指標在線圖的設計上,將呈現出二條的方向線(+DI、-DI)與一條趨向平均線(ADX)來。使用者便是以此來估算出買賣雙方所累積的力量,並且以此來尋求雙方力量的均衡點,進而求知在雙方力量互動下,價格波動循環的過程。
在計算DMI的方向線與趨向平均線值之前,首先得先求得它們形成的根本來源,即每日行情的趨向變動值DM(Directional Movement 或者稱為創新幅度值)與真正波幅值TR(True Range)。
其中趨向變動值又可依據創新幅度的向上與向下而區分為正趨向變動值+DM(positive directional movement value)與負趨向變動值-DM(negative directional movement value)二部份。當日的趨向變動值的求取規則如下:(透過當日行情與前一日行情價位振幅高低的比較而得)
1.當日的+DM值為當日的最高價位值減去前一日行情的最高價位值之差。若此+DM值為負數時,則必須將+DM值改為0,即+DM值必定為大於或等於0的正值。亦即+DM值表示當日行情較前一日行情更向上創新高的幅度值。
2.當日的-DM值為前一日行情的最低價位值減去當日的最低價位值之差。若此-DM值為負數時,則必須將-DM值改為0,即-DM值必定為大於或等於0的正值。亦即-DM值表示當日行情較前一日行情更向下創新低的幅度值。
3.比較所求出來的+DM值與-DM值,將二者之中值較小的一個值改成為0,使二者之中至多僅存在一個正值。亦即於二者之中,只取其中較大者作為當日的趨勢變動值,而忽略較小者的作用。
4.如果所求出來的+DM值與-DM值相等的話,表示上下二力均衡,故二者皆改設成0。
至於當日真正波幅值TR的求取,則是以底下三種波幅計算方法中,取其中數值最大者來作為當日的真正波幅值。(透過當日行情的高低價位值與前一日行情的收盤價位值的比較而得)
A.當日最高價位與當日最低價位差額的絕對值。
B.當日最高價位與前一日收盤價位差額的絕對值。
C.當日最低價位與前一日收盤價位差額的絕對值。
計算出每日行情的趨向變動值+DM與-DM以及真正波幅值TR後,接下來便是再以修正移動平均值的應用方式,來求取更平緩而穩健的數值,亦即以此三者的n日修正移動平均值+ADM、-ADM與ATR來作更深入的分析應用。
有了市場的上升趨向力、下降趨向力以及真實波幅的數據後,接下來便是估算出雙方的累積力量,用以評估並尋求買賣雙方力量的均衡點,以及雙方力量互動下價格波動循環的過程。亦即分別以+ADM值與-ADM值對ATR值的比值,來計算出正方向指標線(+DI)與負方向指標線(-DI)的數值。而後再利用+DI與-DI的差和比值來計算出趨向值(DX)的數值。最後再以修正移動平均值的方式計算出DX的n日平均值即ADX線值來。
詳細的計算公式如下:
±ADMt=±ADMt-1 + (±DMt – ±ADMt-1) / n
即 正ADMt=正ADMt-1 + (正DMt – 正ADMt-1) / n
    負ADMt=負ADMt-1 + (負DMt – 負ADMt-1) / n
ATRt=ATRt-1 + (TRt – ATRt-1) / n
±DIt=±ADMt / ATRt
即 正DIt=正ADMt / ATRt
    負DIt=負ADMt / ATRt
DXt=絕對值(正DIt – 負DIt) / (正DIt + 負DIt) * 100
ADXt=ADXt-1 + (DXt – ADXt-1) / n
其中t為當日值,t-1為前一日值,而在計算第一個修正平均值時,可以先使用簡易平均的方法取得平均值,然後再使用修正平均的方法來計算。至於移動平均的參數值n,一般建議設定的天數值為14日。

由於DMI指標主要的用途在於作趨勢成立的判斷,因此是屬於較為長期交易的技術指標。而DMI指標的三條線中,ADX線可以說是相當奇特的一條線。ADX線在上昇趨勢開始形成時,會從底部往上攀昇,直到上昇趨勢開始平緩而盤旋時,ADX線便回轉向下。而當下降趨勢開始時,ADX線同樣的又開始從底部往上爬昇,直到下降趨勢和緩而盤整時,ADX線又開始向下回轉。

腳本的寫法如下

input: Length(14);
variable: pdi_value(0), ndi_value(0), adx_value(0);

SetInputName(1, "天數");

DirectionMovement(Length, pdi_value, ndi_value, adx_value);

// 初始區波動較大, 先不繪出
//
if CurrentBar < Length then
 begin
 pdi_value = 0;
 ndi_value = 0;
 adx_value = 0;
 end;
 
Plot1(pdi_value, "+DI");
Plot2(ndi_value, "-DI");
Plot3(adx_value, "ADX");

參考圖形

ADX

ADI累積分配指標

ADI指標的原文是Accumulation Distribution Index,按原文直譯的名稱是「累積分配指標」,其實它真正的意思是「漲跌力道聚散指標」,Accumulation指的是上漲力道在累積,而Distribution指的是上漲力道在消散之意,所以是「聚散指標」

ADI計算公式如下:

如果 今日收盤價「大於」昨日收盤價,則

  今日ADI= 昨日ADI + [ 今日收盤價 - Min ( 今日最低價,昨日收盤價 )  ]

否則

     今日ADI= 昨日ADI - [ Max ( 今日最高價,昨日收盤價 ) - 今日收盤價 ]

公式中的Min(A,B)表示取兩者中較小的數字; Max(A,B)表示取兩者中較大的數字

公式中的「 今日收盤價 - Min ( 今日最低價,昨日收盤價 ) 」,代表股價的上升力道,公式之所以這樣設計的原因,是因為今日股價如果上漲的話,那麼要從那裡算起漲點?如果今天一開盤就跳空上漲,收盤又收更高,那麼昨天的收盤跟今天的最低價之間有個上漲的「跳空缺口」,這部份應該要算作今日的上漲力道,所以起漲點應以昨天的收盤價來算;反之,如果今天的盤中低點甚至比昨天的收盤更低,那麼就以今天的最低點當起漲點.所以整個公式的意思是:當今日股價是上漲的話,那麼就將這一上升的力道累加進ADI指標值內.

同樣的,公式中的「 Max ( 今日最高價,昨日收盤價 ) - 今日收盤價 」,指的是下跌的力道,在計算起跌點時,一樣要將下跌的「跳空缺口」也包括在內,因而起跌點是今日最高點與昨日收盤價兩者中較大的那個數字.所以整個公式的意思是:當今日的股價是下跌的話,那麼就將這一下跌的力道從累計的ADI中扣除.

ADI指標是一個累計值,所以是趨勢性的指標,它沒有一個固定的波動範圍,所以指標值的絕對數值沒有意義,重要的是指標線的方向.當指標線往上時,表示上漲力道在「凝聚」,上漲機會較大;反之,如果指標線往下的話,表示上漲力道在「消散」,股價下跌的機率較大.

腳本

variable: adi(0);

if Close > Close[1] then
 adi = adi[1] + (Close - minlist(low, close[1])) 
else
 begin
 if Close < Close[1] then
 adi = adi[1] - (maxlist(high, close[1]) - close)
 else
 adi = adi[1];
 end;

Plot1(adi, "A/DI");

參考圖形

ADI

成交量擺動指標

Volume Oscillator(OSCV)成交量擺動指標顯示兩條成交量移動平均線之間的價格差異,差異可以點值或百分比在圖表中顯示。VC

腳本

Input: length1(5); setinputname(1, "短天期");
Input: length2(20); setinputname(2, "長天期");

Value1 = Average(Volume, length1);
Value2 = Average(Volume, length2);

if value1 = 0 then value3 = 0 else Value3 = (Value1 - Value2) * 100 / Value1;

Plot1(Value3, "OSCV");

參考的圖形

OSCV

您可以使用兩種不同的移動平均量,以確定成交總量的趨勢是增加或減少。當 OSCV 上升穿越零軸以上,它標誌著短期移動平均量已遠遠高於長期移動平均量。 有許多方法來解釋成交量的變化趨勢。一個普遍的信念是,價格上漲加上成交量增加,或價格下跌加上成交量下跌,代表利好。 相反,如果成交量增加時,價格下跌,交易量減少時價格上漲時,市場跡象顯示了潛在的弱勢。

股價上漲加上成交量的增加意味著更多的參與者進入市場,趨勢應可以持續。相反,股價下跌時成交量增加,表示參與者離場,下降趨勢不易逆轉。

KO能量潮指標

累積克林格成交量擺動指標Cumulative Klinger Oscillator是一個與累積能量線OBV相似的指標, 它是利用根據日間股票平均價格的變動而對成交量累積而成,而在累積能量線OBV中用的是日間股票的收盤價的變動來作為成交量累積的標準。 相對來說,累積克林格成交量擺動指標比KO指標更適合用於判斷股票價格趨勢的方向。

腳本

variable: kovolume(0);

value1=(close+high+low)/3;
if CurrentBar = 1 then
 kovolume = 0
else begin 
 if value1 > value1[1] then
 kovolume = kovolume[1] + volume
 else begin
 if value1 < value1[1] then
 kovolume = kovolume[1] - volume
 else
 kovolume = kovolume[1];
 end; 
end;
 
Plot1(kovolume, "KO能量潮指標");

參考圖形

KO

克林波動指標 Chaikin Volatility

Chaikin Volatility 這個指標是在描述價格的波動程度。

公式 :

1.先計算n日的 Range = High – Low 的指數型移動平均

REMAt = REMAt-1 + 2/(n+1) * ( Rt – REMAt-1)

2.計算n日移動平均的變動率:

Chainkin’s Volatility = (REMAt – REMAt-n) / REMAt-n

描述價格的波動程度的狀況有二種,一種是認為當股價向上時的波動程度將隨之上升,此種描述是認為價格上升時經常伴隨著成交量放大, 這表示此過程將吸引更多的市場參與者加入,而更多人的參與交易隱含著波動程度放大。另一種狀況則是認為觀察短期的價格走勢, 則波動的訊雜幹擾會較長期來得大。

對應的腳本

// Chaikin Volatility 指標
//
input: Length(10), LengthROC(12);
variable: _chaikin(0);

SetInputName(1, "天數一");
SetInputName(2, "天數二");

Value1 = XAverage(High - Low, Length);

if CurrentBar >= LengthROC And Value1[LengthROC] <> 0 then
 _chaikin = 100 * (Value1 - Value1[LengthROC]) / Value1[LengthROC]
else
 _chaikin = 0;
 
Plot1(_chaikin, "Chaikin");

參考的圖形

CV

Money flow Index (MFI)指標

MFI的計算方法如下

MFI

對應的腳本

Input: Length(6);
variable: tp(0), tv(0), utv(0), dtv(0), pmf(0), nmf(0), mfivalue(0);

SetInputName(1, "天數");

tp = TypicalPrice;
tv = tp * Volume;

if tp > tp[1] then
 begin
 utv = tv;
 dtv = 0;
 end
else
 begin
 utv = 0;
 dtv = tv;
 end;

pmf = Average(utv, MinList(CurrentBar, length));
nmf = Average(dtv, MinList(CurrentBar, length));


if CurrentBar < Length or (pmf + nmf) = 0 then
 mfivalue = 50
else 
 mfivalue = 100 * pmf /(pmf + nmf);

Plot1(mfivalue, "MFI");

參考的圖

MFI CHART

市場便利指標(BW MFI)

Market Facilitation Index (BW MFI) 市場便利指標是由 Dr. Bill Williams所發明的

這個指標必須搭配成交量來一起看 :

+交易量/+MFI 綠燈(Green)

-交易量/-MFI 衰退(Fade)

-交易量/+MFI 偽裝(Fake)

+交易量/-MFI 蟄伏(Squat)

市場便利指標運用時會與成交量一起使用 : 市場便利指標增加,交易量增加 (Green)。

這一點表明 :

  1. 進入市場的交易人員的數量增加。(交易量增加)
  2. 新的交易人員會隨著柱圖的發展趨勢入市。(例如,移動的開始和速度的加快)

市場便利指標的回落和交易量的下降 (Fade),表明市場的交易人對該市場不在感到有任何的興趣。

市場便利指標的增加,但交易量下降 (Fake)。最有可能的就是,市場並不受到來自客戶交易量的支援,價格隨著“底樓”交易人員的遊資而變化(經濟人和交易人)

市場便利指標的下跌,但是交易量的增加 (Squat)。存在牛力和熊力之間的鬥爭。主要特徵為大量的買進和大量的賣出。 但是價格沒有重大的變化,因為兩股勢力比較相當。競爭的其中一方(買家或賣家)將會最終贏得這次鬥爭的勝利。 通常,柱形的停滯讓你知道是否這個柱形決定了市場趨勢的連續性,或這個柱形終止了市場趨勢。Bill Williams 稱之為“Squat”。

腳本的寫法

{
指標說明
Market Facilitation Index
}

if volume <> 0 then
 value1=(high-low)/volume;
if value1>value1[1] and volume>volume[1] then begin
 plot1(volume,"綠燈");
 noplot(2);
 noplot(3);
 noplot(4);
end;
if value1>value1[1] and volume<=volume[1] then begin
 plot2(volume,"偽裝");
 noplot(1);
 noplot(3);
 noplot(4);
end;
if value1<=value1[1] and volume>volume[1] then begin
 plot3(volume,"蟄伏");
 noplot(1);
 noplot(2);
 noplot(4);
end;
if value1<=value1[1] and volume<=volume[1] then begin
 plot4(volume,"衰退");
 noplot(1);
 noplot(2);
 noplot(3);
end;

參考的圖形

BW MFI