Author Archives: 發財橘子

布林值指標翻多

布林值是很常被應用的技術分析工具,布林通道的的值是股價的移動平均線再加上N個股價的標準差。這個指標是來自於統計學的概念,統計學裡,變異數是把每一點到平均線的差的平方加總起來除以計算天數,這個數字愈大,代表股價的波動愈大。標準差則是把變異數開根號,統計學上教我們,如果股價的波動是屬於一種常態分配,那麼股價的波動範圍,有超過95%的機率會在正負兩個標準差之內。

所以如果布 林值的上下兩條線在收斂,代表波動幅度在變小,股價陷入整理,這時候如果股價創高,且突破均價,那就有可能是一個多頭的起點。

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

condition1=false;
 
setbackbar(20);
input:length(20);
variable:up1(0),down1(0),mid1(0),bbandwidth(0);
up1 = bollingerband(Close, Length, 2);
down1 = bollingerband(Close, Length, -2 );
mid1 = (up1 + down1) / 2;

bbandwidth = 100 * (up1 - down1) / mid1;

if linearregslope(up1,10)[1]<0
and linearregslope(down1,10)[1]>0
and bbandwidth[1]*1.1<average(bbandwidth,20)[1]
and close crosses over mid1
and close crosses over highest(high[1],2)
then ret=1;

以下的例子,就是符合上述腳本的標的

g71

這個策略在基金投資的

回測報告如下

g70

 

 

 

葛拉罕的價值投資標的

巴菲特的老師葛拉罕,曾經訂過一個選股條件 :總市值小於流動資產減總負債的2/3

意思是,如果一家公司股價跌到總市值比流動資產減總負債還低,還且還低了不少,那麼這家公司如果以目前的股價全數買下來,光拿流動資產去還債後,還有剩。

當然如果一家公司股價跌的這麼慘,通常是因為虧錢,市場預先把未來會虧的錢扣掉了。

我實際上去回測這個選股條件在台灣到底靈不靈,結果發現勝率還真的不低,有四戰三勝的戰績。

我寫了一個選股腳本來選符合這個條件的股票

value1=GetField("流動資產","Q");//單位是百萬
value2=GetField("負債總額","Q");//單位是百萬
value3=GetField("總市值","D");//單位是億
if 2*(value1-value2)>3*value3*100
then ret=1;
if value3<>0 then value4=(value1-value2)/(value3*100);
outputfield(1,value4,2,"流動資產減負債佔總市值比");

我拿這個腳本去回測過去十年的歷史數據,出場是設在180天後,回測報告如下

2018110803

十年一共有253個進場機會,其中199次可以獲利出場勝率高達78%,單筆平均報酬率接近六成。

在多頭市場,這樣的標準很難挑到股票,但在空頭市場,這樣的公司就可能出現,所以空頭市場反而應該啟動這個選股策略,以下是目前符合這個策略的股票

2018110804

各位請從中間再去挑您覺得會有東山再起機會的個股,這種股票才是這個策略挑出來的股票裡,真正會讓您賺到大錢的標的。

近幾日總收黑

如果在空頭市場,過去七天有五天是收黑,而且成交量比二十日均量減少超過兩成,那麼這是人氣衰退的重要訊號。

對應的腳本如下

if countif(close<open,7)>=5
//過去七天有五天以上收黑
and volume*1.2<average(volume,20)
//成交量比二十日均量減少超過兩成
then ret=1;

跌破上昇趨勢

一個多頭市場的末升段,往往會出現空頭全面潰敗,市場一面樂觀的飆漲行情,這時上漲的角度會是又急又陡,如果這樣的趨勢線被跌破了,那就可能是整個波段行情的結束。

基於這樣的想法,所寫的腳本如下

input:Length(10); setinputname(1,"上升趨勢計算期數");
input:_Angle(30); setinputname(2,"上升趨勢角度");

settotalbar(Length + 3);

variable: TrendAngle(0);
variable: TrendAngleDelta(0);

if Close< Close[1] and Close[1] <Close[2] and Close[Length]>0 then begin

linearreg((high/Close[Length]-1)*100,Length,0,value1,TrendAngle,value3,value4);
 
TrendAngleDelta =TrendAngle-TrendAngle[1];
IF TrendAngleDelta-TrendAngleDelta[1] < -10 and close >Close[Length] THEN RET=1;
 
end;

這樣的賣出訊號,出現的次數有限,可以檢視其出現的位置是否真的是一大段的漲幅的最後。

井字型死亡交叉

井字型死亡交叉是四個天期的移動平均線呈現兩條短天期均線向下,兩條較長天期均線向上的排列方式,可以用以下的圖來表示

C73

通常這種情況極有可能是一個作頭的訊號。

對應的腳本如下

variable:a5(0),a10(0),a20(0),a30(0);
a5=average(close,5);
a10=average(close,10);
a20=average(close,20);
a30=average(close,30);

if linearregslope(a5,5)<0
and linearregslope(a10,5)<0
and linearregslope(a20,5)>0
and linearregslope(a30,5)>0
then ret=1;

週月線死亡交叉

週線跌破月線,是移動平均線在應用上一個很常見的賣出訊號。特別是如果出現這個訊號之前,價格是屬於盤頭的形態,那就有更高的可信度

以加權指數為例

c72

我們可以發現,這個賣出訊號出現的頻率不低,在空頭市場,之後往往出現大跌一段的走勢,但在多頭及盤整市場,就未必那麼靠譜。所以這個賣出訊號在應用上,還是要考量目前整體大環境是否有利於資金往股票市場匯聚,如果全體市場一片榮景,只有個別領域或市場出現這個訊號,那就需要更多其他賣出訊號來佐證了。

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;