Author Archives: 發財橘子

OBV指標

能量潮指標(On Balance Volume)簡稱為OBV,也有人稱之為人氣指標,是一種依據行情的漲跌,來累計或刪去市場的成交量值,而以此累算值作為市場行情動能變化趨勢的指標。同時它也是一種將一根一根起起伏伏不易觀察的成交量圖,轉變而成較易觀看分析的連續線圖的一種指標。
依據OBV創始者葛蘭碧(Joseph Granville)的看法,市場的動能應該是反應在成交量的變化,至於價格則只是一種外在的表徵而已。量是價的先行指標,先見量、後見價。成交量的多寡本身反應出市場交易的活絡度,同時也代表市場上人氣的興衰。
OBV指標在算法上相當簡單,只要依照行情的漲跌來累計市場上每日的成交量值即可。亦即是將上漲日的成交量值視為買進的正值累加,而下跌日的成交量值則視為賣出的負值減去,依此而得出漲勢與跌勢雙方動能消長的變化。詳細計算方式如下:
先任意設定一起始值OBV0,如10000。接著累算以後每日的OBV值:
OBVt = OBVt-1 + Volume      IF Closet > Closet-1
OBVt = OBVt-1 – Volume       IF Closet < Closet-1
其中t為當日值,t-1為前一日值,Volume為當日的成交量值,Closet為當日的收盤價位,Closet-1為前一日的收盤價位。而為了使用來作判斷的價位值更具有實質意義,也不妨以當日的平均價位值來作累算OBV的判斷。
在研究OBV線圖時,主要的重點在於研究OBV線圖的走勢方向,而並非OBV值本身的大小。因為不同的起始點將會繪製出不同的OBV線圖值來,但是相對的OBV線型的走勢方向卻是不變的。同時OBV線經常與價位圖形一起配合使用,以判斷走勢是否成立。而當價位走勢與OBV走勢呈現背離或分歧時,經常是行情即將反轉的一個訊號。
以加權指數做例子
C71
我們去尋找OBV的高點,然後以高點之後兩天的最低價作為基準價,如果價格跌破基準價,就視為賣出訊號。
對應的腳本如下:
input:Length(15); setinputname(1,"計算期數");
variable: OBVolume(0),Kprice(0);

value1 = close-close[1];

if close<> close[1] then 
 OBVolume += Volume*(value1)/absvalue(value1);

 if close<highest(high,Length) and
 OBVolume[2]=highest(OBVolume,Length) and 
 OBVolume=lowest(OBVolume,3)
 then Kprice =L ;
 
 Ret= Close crosses under Kprice;

MACD死亡交叉關鍵價跌破

MACD死亡交叉 是被普遍應用的賣出訊號,但我們以加權指數為例,在實務上,不一定一出現死亡交叉就賣出,因為這可能受到當時消息面或突發事件的影響,也可以是把死亡交叉當日的最低價做為一個基準價,一旦價格跌破這一基準價時再賣出。

C69

根據這樣的邏輯所寫的腳本如下:

input: FastLength(12), SlowLength(26), MACDLength(9);
variable: difValue(0), macdValue(0), oscValue(0),Kprice(0);

SetInputName(1, "DIF短期期數");
SetInputName(2, "DIF長期期數");
SetInputName(3, "MACD期數");

MACD(weightedclose(), FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue);

if difValue Crosses Below macdValue then Kprice =L;

if Close crosses under Kprice then ret=1;

DMI翻空

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指標主要的用途在於作趨勢成立的判斷,因此是屬於較為長期交易的技術指標。

舉加權指數為例,請參看下圖

C70

當+DI往下,-DI往上,且-DI穿越+DI時,如果是在一個空頭市場,或是一個比較長的修正趨勢裡,這是一個反轉的確認訊號。但由於計算方式的關係,如果是在一個多頭市場或盤整行情,這樣的情況就不見得是一個高可信度的賣出訊號了。

以下是對應的腳本

input:Length(14); setinputname(1,"計算期數");
variable: pdi(0), ndi(0), adx_value(0);
DirectionMovement(Length, pdi, ndi, adx_value);
if pdi<pdi[1] and ndi>ndi[1] and ndi crosses over pdi then ret=1;

DIF-MACD翻負

MACD是大家耳熟能詳的技術分析指標,英文原名為 Moving Average Convergnece & Divergence,也就是收斂發散移動平均線的意思,所以顧名思義它是移動平均線的一種。這個指標在技術分析各指標當中,算是極普遍又有名的一個。以下是MACD的計算步驟:

1.      計算出真實成本:

 

 Pt=Ct ´ 1/2 + Ht ´ ¼ + Lt  ´ ¼    其中 Ct為收盤價, Ht為最高價, Lt為最低價

 

2.      計算兩條平滑平均線 12EMA26EMA


Et =  Et-1  +  α  
´  (  Pt  –  Et-1  )

其中 Et為當日平滑平均值, Et-1為前一日平滑平均值,  Pt為當日真實成本,         

α= 2 / ( 1+ MA)   MA = 平均天數 (=1226 )

3. 計算正負差線


DIF = 12EMA – 26EMA

4. 計算MACD(或稱EDA)

   DIF線取九天EMA平均值即得

 

5.柱線 = DIF線–MACD

根據這個公式,DIF-MACD就是 12日與26日平滑平均線的差值跟其九日移平均線的差,如果短期股價是上漲,DIF就應該是往上走,跟MACD之間的差應該是正的,如果趨勢往下,這個值就會翻黑。

舉加權指數為例

C69

從上圖來看,DIF-MACD翻負,在多頭及盤整時基本上算是漲勢的拉回或修正,但在空頭市場,則是跌勢的確認,所以當出現這個訊號時,可以搭配其他型態上等因素一起考量,如果是在一個大環境不利多頭發展的情況下,那麼這個訊號就必須被嚴肅的看待。

以下是這個賣出訊號的腳本

// DIF-MACD翻負
input: FastLength(12, "DIF短期期數"), SlowLength(26, "DIF長期期數"), MACDLength(9, "MACD期數");
variable: difValue(0), macdValue(0), oscValue(0);
MACD(weightedclose(), FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue);
 
if oscValue Crosses Below 0
then ret=1;

 

多次到底而破

多次到底而破的型態有如下圖

C67

有點像是跌破多次止跌區的概念。

對應的腳本如下:

input:day(100);
input:band1(4);
setinputname(1,"計算區間");
setinputname(2,"三高點之高低價差");
value1=nthlowest(1,low[1],day);
value2=nthlowest(3,low[1],day);
value4=nthlowestbar(1,low,day);
value5=nthlowestbar(3,low,day);
value6=nthlowestbar(5,low,day);
value7=absvalue(value4-value6);
value8=absvalue(value5-value6);
value9=absvalue(value4-value5);
condition1=false;
if value7>3 and value8>3 and value9>3
then condition1=true;
value3=(value1-value2)/value2;

if value3<=band1/100
and close crosses under value1
and volume>2000
and condition1
then ret=1;

以下的例子是從上面的腳本中挑中的。

這個策略在空頭市場有不錯的勝率,如果手上有的基金出現這樣的型態是真的必須小心是否是另一段跌勢的開始。

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的參數值。

所以當C CI是個乖離概念,那麼我們就可以寫一個腳本,找出當CCI超過100超買之後,如果價格跌破當被超買時的股價低點,把它視為一個賣出訊號,下面就是這麼一個腳本

Input: Length(14), AvgLength(9), Overbought(100);
Variable: cciValue(0), cciMAValue(0),KPrice(0);

SetInputName(1, "期數");
SetInputName(2, "平滑期數");
SetInputName(3, "超買值");

cciValue = CommodityChannel(Length);
cciMAValue = Average(cciValue, AvgLength);
if cciMAValue Crosses Above OverBought then KPrice =L;;

if Close crosses under KPrice then ret=1;

這個腳本就是專門在正乖離過大時,一旦股價跌破關鍵價位,就出賣出訊號。

好久沒出現的連五日上漲

如果近百日以來都沒有出現價格連續五天上漲,而現在出現了,這代表這市場先前並沒有出現多頭長驅而入的現象,但現在出現,這就是個訊號,一個多頭士氣如虹的訊號。

我們可以把這個現象寫成腳本如下

setbarback(100);
if trueall(close>close[1],5)
and barslast(trueall(close>close[1],5))[1]>100
then ret=1;
//40天後出場

然後就可以找出像下面這張圖的標的

C65

這個腳本在多頭市場的回測報告如下

 

C64

如報告中所列,其實基金對應的Benchmark要出現這樣的訊號,次數並不多見,但勝率其實不錯,所以如果出現這個訊號,是可以多留意該市場的後市的。

多方勢力壓過空方

基金投資用的Benchmark都是指數對應的ETF,除了價量之外,一般沒有像個股有其他的決策可應用的欄位如籌碼,如財報等等,這時候像開高低收這四個價位也就很彌足珍貴,需要更用力的使用,例如我們可以把每天的最高價減收盤價稱為上檔賣壓,把收盤價減最低價稱為下檔支撐。諸如此類的,透過對多空力道的定義及演算,計算出一天裡的多空淨力道,然後據以作為研判市場多空的依據。

根據這樣的精神,對應的腳本如下

input:day(5,"短期參數"),period(10,"長期參數");

value1=summation(high-close,period);//上檔賣壓
value2=summation(close-open,period); //多空實績
value3=summation(close-low,period);//下檔支撐
value4=summation(open-close[1],period);//隔夜力道
if close<>0
then
value5=(value2+value3+value4-value1)/close*100;

value6=linearregslope(value5,period);
if trueall(value6[1]<0,10)
and value6>0
and value5 <0
then ret=1;

以下是一個上述腳本挑出來的例子

c63

這個策略在多頭市場的回測報告如下

c62

由於這個策略只要是近十天多空淨力趨勢開始由下轉向上時就算數,所以跑出來的交易次數蠻多的,可以輔以其他的策略來搭配使用。

碗型底

在型態學上,碗型底是一個可遇不可求的型態,這種碗如果夠大,後面多頭行情就可能走的愈長久,但可惜碗型底要用程式寫出來有點難度,我們試著寫出一個儘量接近的腳本,幫大家挑出可能的碗型底,但由於目標是寧可多挑也不要放過,所以挑中的標的,還需要大家用肉眼再作一次確認。

我們寫的腳本如下

input:t2(60,"敏感度(T)"),S1(true,"T=早訊號,F=晚訊號");
variable:t1(1);
value1=(H+L+O+C)/4;
value2=square(H)+square(L)+square(O)+square(C);

value14+=value2;
if value2[t2]<>0 then value14-=value2[t2];
value15+=value1;
if value1[t2]<>0 then value15-=value1[t2];
value16=(value14-t2*4*square(value15/t2))/(t2*4);

value17=mtm(t2/2);
value18=wma(value17,round(t2*0.2,0));
value19=wma(value16,round(t2*0.2,0));

condition1=s1 and value19<value19[1] and value18>value18[1];
condition3=not s1 and value18 crosses over 0;
if value18 crosses under 0 then condition2=true;
if trueall(value19>value19[1] and value18<value18[1],t2*0.1) then condition4=true;
if (condition1 or condition3) and condition2 and condition4
then begin
 condition2=false;
 condition4=false;
 ret=1;
end;

符合這個腳本的例子如下

c61

這個腳本在多頭市場下的回測報告如下

 

c60

碗型底原本就可遇不可求,這個腳本把條件設的比較寬,挑中的要麻煩大家再檢視一下。

趨向指標轉向多頭(ADX趨勢成形)

ADX是DMI這個指標裡,一個確認趨勢確立的指標,這個指標轉正,代表上漲趨勢已然確立,我們發現,這個指標拿來應用基金投資的相關指數Benchmark上,有不錯的效果。

要印證這樣的想法,對應的腳本如下

input: Length(14), Threshold(25);

variable: pdi_value(0), ndi_value(0), adx_value(0);

settotalbar(maxlist(Length,6) * 13 + 8);

SetInputName(1, "期數");
SetInputName(2, "穿越值");

DirectionMovement(Length, pdi_value, ndi_value, adx_value);

if adx_value Crosses Above Threshold
then ret=1;;

以下的例子就是腳本所挑出來的標的之一,這樣的訊號會出現在整個上昇趨勢確定的當下。

C59

這個策略在多頭市場下的回測報告如下:

C58

從勝率上看,幾乎已經是三戰兩勝的比例了。