Author Archives: 發財橘子

從OTC與加權指數表現落差觀察大盤轉折點

 入行27年,用新台幣,學到了不少經驗,其中一個是,”當大家都不好的時候,代表大環境讓公司派偏空,這樣的大環境如果無法改善,連原本還可以的公司,也會不如預期”。

因為這樣的經驗,我一直相信一個原則,那就是”行情要落底,OTC的股票要先抗跌 ,行情要作頭,OTC的股票先回頭”。

這樣的經驗來自民國84年,前一年是大多頭,隔年call公司時,我發現大部份的公司都說的很保守,特別是那些股本不大的公司,受景氣影響波動會比較大的公司,好不容易看到一家表現還比83年好的,二話不說,我就全押在這一檔身上,不只自己押,我還敲鑼打鼓叫親朋好友也都押,一開始大部份的股票在下跌時,這檔還很抗跌,甚至還逆市上漲,但隨著大環境的持續惡化,這家公司開出來的數字跟原先的預期還是有些落差,最後還是跌了下來,那一次對我是很大的打撃,我有位很要好的朋友因為這一檔,把原本要買房子的錢都賠光了,從此,我很留意中小型公司對於未來業績的看法,因為我發現,當一整片都悲觀的時候,樂觀的,後來會被證明太樂觀。

最近XS支援跨商品時,我試著想把這樣的觀察用數據來印證,我試著用一個指標來印證我的觀察, 底下的腳本就是這個指標,我稱之為小型股表現指標。

這個指標的腳本如下:

input:period(5,"移動平均天期");
value1=GetSymbolField("otc.tw","收盤價");
value2=rateofchange(value1,2);
value3=rateofchange(close,2);
if value2>=0 
then value4=value2-value3
else
if value2<0 and value2>=value3
then value4= absvalue(value3)-absvalue(value2)
else
value4=absvalue(value2)-absvalue(value3);
value5=average(value4,5);
plot1(value5);

這個指標是把OTC指數的漲幅減加權指數的漲幅相減,在把這數字作移動平均,畫出來的圖如下:

061402
一直以來,我有觀察到一個現象,那就是OTC的股票,公司派表態的情況比較普遍 ,所以指數落底前,OTC會先抗跌,相反的,OTC漲不動,加權指數再漲的話 ,反轉的機率會昇高。

這些年,我之所以還能存活在市場上,我自己覺得有兩個重要因素,一個是我會控制持股比例,不再重押全梭,另一個則是,透過一些指標及數據,我站對邊的機率變高了,特別是在反轉的過程中,我會更警覺,會更小心。

這可能也是我漸漸從消息面操作者,變成數據派操作者的關係吧,我想。

xqlite banner

有量的中小型股才是操作者的核心標的

是不是盤好的時候買什麼都一樣?我寫了一個腳本如下,就是當大盤週線在月線之上時,個股不需要其他條件就直接進場。

if average(GetSymbolField("tse.tw","收盤價"),5)>
average(GetSymbolField("tse.tw","收盤價"),20)
then ret=1;

首先我拿這腳本來跑所有股票

060904

看這回測報告就知道,就算大盤很好,亂槍打鳥還是會輸的很慘。

接下來我用同樣的腳本跑權值股及中型100成份股,底下是回測報告

060905

原本認為權值股及中型100會比較貼近大盤,實際上去跑回測反而輸的更慘

權值股不見得能順著大盤上漲,那麼我就不跑大型股,換作來跑股本10億以下的小型股,一共有719檔,底下是回測報告。

060906

勝率只有36.51%,總報酬雖然很好,但那是總交易次數推出來的,基本上算是隨波逐流。

 

最後還是用我最常用的有量的中小型股下去跑(五日均量超過1000張,股本小於40億),下面是回測報告。

060907

這個勝率41%,然後淨值上下波動的幅度沒有前幾種大,意思是盤如果不錯,這些股票是能漲的,但如果盤不好,這些股票還是會跌的很慘,可是我們漲的時候停利用10%,跌的時候停損用5%,也就是贏一次就可以抵掉輸了兩次,也因此三年下來才會出現5366%的總報酬率,但3年7706次的總交易次數還是太多,一年平均進場2500多次,一個月平均進場200次,一天進場10次,實在是太多了。

但從上面的實測,我們可以確定一點:” 有量的中小型股,是在大盤上漲時,最有機會展現一段多頭行情股票群體”

 

因此,我的思考的方向改成,”在大盤表現不錯的時候,透過一些方法,在這個群體中,找出真正轉強的股票”,試著濾掉那些無謂的交易次數。

例如以下的這個腳本

condition1 = GetField("投信持股")[1]<=1000 and getField("投信買賣超")[1]=0;

if H>H[1]
and TrueAll(condition1[1],60)
and GetField("投信買賣超")[1]*C>1000
and average(GetSymbolField("tse.tw","收盤價"),5)>
average(GetSymbolField("tse.tw","收盤價"),20)
then ret=1;

 

這個腳本就是在大盤好的時候,去尋找投信才剛剛介入的有量中小型股,

它的回測報告如下

060908

我們會發現,過去三年,才出現42次的觸發交易,淨值也不會像波浪一樣,呈現太大幅度的上下震盪,而是基本穩定往上走。

 

這樣的方法就是透過一個有效的策略,過濾雜訊,找出真正值得交易的訊號。

 

 

xqlite banner

 

 

盤上成交是否真的是重要指標?

老師父們一向很重視一檔股票今天有多少成交量是在盤上成交,他們認為,盤上成交代表的是買盤勇於用比前一天收盤價更高的價格來買進,這是一種積極性買盤的表徵,我試著以這樣的邏輯,建構出一個勝率還不錯的交易策略。

要算盤上成交的比例,XS有內建一個欄位叫上漲量,所以我就寫了一個簡單的自訂指標腳本

value1=GetField("上漲量","D");
if volume<>0
then value2=value1/volume;
plot1(average(value2,5));

但寫完之後覺得這樣似乎完全沒有考慮到當天分時交易的多空拼搏,所以我又另外用一分鐘線最後是收在昨日收盤價之上與否,來決定是否把那一分鐘的成交量納入累積的盤上成交量,根據這個原則,寫了另一個自訂指標腳本如下

array: x[240](0);
var:i(0);

for i=1 to 240
begin
if GetField("收盤價","1")[i-1]>close[1]
then 
x[i]=GetField("成交量","1")[i-1]
else
x[i]=0;
end;
value1=array_sum(x,1,240);
if volume<>0
then 
value2=value1/volume;
value3=average(value2,5);

plot1(value3);

這個腳本我是宣告一個陣列來代表每天的240根1分鐘線我要被加計進量的成交量,如果當根1分鐘線的收盤價大於前一天日線的收盤價,那麼當根1分鐘線的成交量就被算進來,不然陣列的那一格就是0,然後我再用array_sum這個把陣列裡每個值全部都加總起來的函數來計算這240格的總和,這就是當天1分鐘線收在盤上的成交量總和。

然後再把這兩個指標跟加權指數擺在一起看,會如下圖

060903

從這張圖我們可以明顯的看到,當這個值由低檔往上走的時候,代表積極性的買盤,佔整個買盤的比重在成長,這往往是止跌回昇的前兆,而用1分鐘線來計算的盤上累計成交量,由於考慮到每一分鐘多空拼搏的角力,其數字對多空趨勢又比單純用上漲量來得敏感許多,所以我就用1分鐘線的累積盤上成交量作為策略的核心,寫了下面這個腳本

array: x[240](0);
var:i(0);

for i=1 to 240
begin
if GetField("收盤價","1")[i-1]>close[1]
then 
x[i]=GetField("成交量","1")[i-1]
else
x[i]=0;
end;
value1=array_sum(x,1,240);
if volume<>0
then 
value2=value1/volume;
value3=average(value2,5);
if value3 cross over 0.2
and GetSymbolField("tse.tw","收盤價","D")
>average(GetSymbolField("tse.tw","收盤價","D"),10)
and volume>average(volume,20)*1.2
then ret=1;

要特別說明的是,我依然只跑有量中小型股,停利用10%,停損用6%

這部份的回測蠻花時間,所以我試跑了最近三個月,回測報表如下

060909

 

各位不妨也試試看用盤上成交比例這樣的概念來開展自己的交易策略。

 

xqlite banner

有沒有多空都能賺錢的交易策略??

“我希望有一個策略,大盤在漲的時候我會賺錢,大盤在跌的時候我也會賺錢。” 這是先前來學程式交易的某網友,許的願望。(我很想跟他說你直接叫我乾爹,我給你零用錢比較快)

不過正所謂需求創造供給,這陣子有空就在想如何建構一個多空都要能賺錢的交易策略,搭捷運時想,走路時想,有時候連睡覺前都在想,想來想去,想到了一招,我寫了一個小程式,似乎可行,今天就來跟大家分享這個嚐試。

請大家先看下面這張圖

0050 and 00632r

TSE,0050及00632R擺在一起看,TSE漲時,0050會漲,TSE跌時,00632R會漲,所以我們如果有個策略,可以抓到多空轉折點(不用太精準,大勢看對有接對就行),那麼應該可以實現一個策略多空都賺的願望。

於是,我寫了一個腳本如下: 用0050及00632R這兩檔ETF去跑

if symbol="0050.TW"
then begin
if average(GetSymbolField("tse.TW","收盤價"),5)
crosses over average(GetSymbolField("tse.TW","收盤價"),20)
then ret=1;
end;

if symbol="00632R.TW"
then begin
if average(GetSymbolField("tse.TW","收盤價"),5)
crosses under average(GetSymbolField("tse.TW","收盤價"),20)
then ret=1;
end;

今年以來,回測的報告真的不錯

060701

如果從00632R上市的時候2014年11月起跑回測,也還OK

060702

這個腳本的概念就是當加權指數週線突破月線時進場買0050,當週線跌破月線時,進場買00632R

用這個方法,會輸錢都是輸在均線假突破跟假跌破,至於怎麼濾掉假突破跟假跌破,先賣個關子,下次有機會再來討論

在腳本中有用到symbol這個函數,它的用法是

symbol=”商品代碼”

不過這邊有個小陷阱,商品代碼的英文字母記得一定要用大寫,小寫電腦不認識。

 

 

xqlite banner

 

從大盤上漲下跌家數的變化來預測大盤未來方向

對於台股後市,我一直使用上漲下跌家數差這個指標來當作溫度計,這個指標有幾種不同的計算方式,不同的方式,背後有著不同的思維邏輯,那種方式比較值得採用,就視大家不同的操作理念而定,但我把常用的計算方式全部列出來,讓各位自行覺得那麼計算方式跟您最投緣了。

當我們把上市所有個股的上漲家數及下跌家數拿來設成指標時,最直接的計算方式就是把每天上漲家數與下跌家數的差值相減,計算一段區間的總和,然後把它畫成一條指標,如果要寫成腳本,我的寫法如下

input:period(10,"RSI計算天數");
value1=GetField("上漲家數");
value2=getfield("下跌家數");
value3=value1-value2;
value4=summation(value3,period);
plot1(value4,"上漲下跌家數差區間總和");

畫成指標,跟加權指數的對照就像下圖

060401

從這張圖我們可以發現兩件事

1.當上漲下跌家數差的十天總和超過2000且與指數呈現背離時,是大盤多頭力氣竭盡的前兆,同樣的,這個數字跌破-2000時,往往指數會開始打底準備反彈,這時候就不宜再追空了。

2.這個數字從-2000底下反彈而上時,是指數的買進訊號。我自己在操作上通常是當這訊號出現時就翻多,當然很多時候這只是大盤空頭走勢中的小反彈,所以我會以指數跌破五日線作為短線停損停利的標準。

 

單純使用這個時間序列是可以,但忽上忽下的數字還是比較無法很直覺的catch到多空的方向,這時候我們可以透過一些方法,來讓一個時間序列所呈現的買進賣出訊號更明確。

方法一: 用移動平均線把時間序列平滑化

處理一個每天波動較大的時間序列,要更清晰地看出他的趨勢方向,最直接的方法就是用移動平均線來作平滑,所以我們可以把上漲下跌家數差十日總和作移動平均,我寫的腳本如下:

input:period(10,"RSI計算天數");
value1=GetField("上漲家數");
value2=getfield("下跌家數");
value3=value1-value2;
value4=summation(value3,period);
value5=average(value4,5);
plot1(value5,"上漲下跌家數差區間總和移動平均");

把它畫成跟加權指數的對照圖如下:

060402

在沒有平滑之前,很容易出現假訊號,我把上漲下跌家數差總和突破-2000當作加權指數買進訊號去回測一年就出現九個買進訊號,但其中只有兩個賺錢,勝率只有22.2%,但如果用5日加權平均值來回測三年,回測圖如下:

060403三年出12個買進訊號,其中一半後來漲幅超過7%,勝率剛好五成。

方法二: 拿兩條長短天期不同的均線來看交叉

這個方法是取兩條不同天期的移動平均線,來看不同天期趨勢是否都已經進入到反轉的階段,畫圖的腳本如下:

input:period(10,"RSI計算天數");
value1=GetField("上漲家數");
value2=getfield("下跌家數");
value3=value1-value2;
value4=summation(value3,period);
value5=average(value4,5);
value6=average(value4,20);
plot1(value5,"上漲下跌家數差區間總和短期移動平均");
plot2(value6,"上漲下跌家數差區間總和長期移動平均");

畫出來的圖像下方這樣

060404

這兩條線,分別代表這個時間序列不同天期的趨勢,通常當這兩條線都在低檔區翻揚,而且出現黃金交叉,大盤反轉向上的機率就很高,但也有幾次是長天期趨勢還在跌,短天期趨勢已翻轉,如果要等到長天期趨勢也轉正,進場的時機就會晚了一點。

有另一個方法可以來運用這兩條均線,那就是方法三所有的,把這兩條均線相減看兩條線的差值

方法三: 計算兩條均線的差額

把不同天期均線相減,可以得出一個在0上下波動的柱狀圖,這樣的指標,可以更清楚的呈現短期與長期均線的差值,對於那些要尋找兩者之間差距是在擴大還是縮小的使用者,這是一個自訂指標的好用法

以上面的例子,我們可以把腳本改成下面的寫法

input:period(10,"RSI計算天數");
value1=GetField("上漲家數");
value2=getfield("下跌家數");
value3=value1-value2;
value4=summation(value3,period);
value5=average(value4,5);
value6=average(value4,20);
value7=value5-value6;
plot1(value7,"上漲下跌家數差區間總和長短天均線差");

再把呈現的方式改成柱狀,畫出來的圖就會如下圖

060405

除了用均線及其衍生的計算方法之外,也可以借用古老技術分析在計算技術指標時的一些傳統的計算方法

方法四: 透過RSI的運算來計算超買與超賣的情況

任何一個時間序列,不需要開高低,只需要收盤價,就可以計算RSI,RSI的概念是一個數列N日來上漲的部份除以每日波動的部份(包括上漲跟下跌),所以如果N日來都是上漲,那麼RSI會是100,N日來都是下跌,RSI會是0,RSI是一個在0到100之間波動的數字

我們可以運用這個數字,來觀察一個時間序列在一段期間內是否連續上漲或連續下跌,這樣也是觀察一個時間序列的方式

以上面的序列來說,我們也可以改寫成以下的腳本

input:period(10,"RSI計算天數");
value1=GetField("上漲家數");
value2=getfield("下跌家數");
value3=value1-value2;
value4=summation(value3,period);
value5=rsi(value4,period); 
plot1(value5,"上漲下跌家數差區間總和RSI");

然後畫成的圖就會如下圖

060406

 方法五:透過MTM來計算動能

動能也是一種關注時間序列的指標,計算的方法很單純,就是用最新的價格減去N日前的價格,用MTM來看上述序列的圖如下

060407

除了上述的方法之外,也可以用KD來計算擺盪,用乖離來計算價位跟平均線的距離,也可以用統計學上的方法來計算目前的價位是否跳出常態分配的範圍

060408要畫出上圖的腳本則如下

input:period(10,"RSI計算天數");
value1=GetField("上漲家數");
value2=getfield("下跌家數");
value3=value1-value2;
value4=summation(value3,period);
value5=bollingerband(value4,20,2);
value6=bollingerband(value4,20,-2);
plot1(value4,"上漲下跌家數差區間總和BBand");
plot2(value5);
plot3(value6);

綜合上述的內容,我試著一步步地利用大盤漲跌家數差總和這個數值,透過自訂指標的方式,從數值的不同運算,找出運用這個數值的一些規則,再把這些規則改寫成交易策略,然後經過不斷的回測,找到真的可以上戰場的交易策略。

希望在全世界只有我們開盤的這一天,能夠帶給大家一些開發私房交易策略的靈感

 

xqlite banner

 

一個觀察大戶在進貨還是出貨的指標

透過成交金額除以總成交筆數,我們可以算出當天的平均每筆成交金額,長期觀察這個數字,我發現搭配當天的價格走勢,可以判斷主力大戶是在出貨還是進貨。

計算每筆成交金額的腳本可以像下面這麼寫

var:cp(0);
var:count(0);
count=0;
value1=GetField("總成交次數","D");
value2=GetField("成交金額");

if value1<>0
then value3=value2/value1
else
value3=0;

plot1(average(value3,5));

以聯電為例,我們來看以下這個指標跟股價的對照圖

060303

我們會發現,當每筆成交金額異於平常且股價表現也異於平常時,往往是大戶進場的癥兆,為了抓到這樣的機會,我寫了一個腳本如下:

input:length(20);
variable:up1(0),down1(0),mid1(0),bbandwidth(0);
up1 = bollingerband(Close, Length, 1);

var:cp(0);
var:count(0);
count=0;
value1=GetField("總成交次數","D");
value2=GetField("成交金額");

if value1<>0
then value3=value2/value1
else
value3=0;
value4=close-open;
value5=average(value3,3)*average(value4,3);
value6=bollingerband(value5,20,2);
if getsymbolfield("tse.tw","收盤價")
>average(getsymbolfield("tse.tw","收盤價"),10)
then begin
if close cross over up1
and value5 cross over value6
and close<close[10]*1.1

then ret=1;
end;

 

拿這個腳本去回測,我用那些有成交量的中小型股票來跑,一年期及三年期的回測報告如下:

06031y

 

06033y

 

各位老大可以自己試試在每筆平均成交金額這樣的數據上,尋找私房的交易策略

 

xqlite banner

開高後不拉回的中小型股

市場老手有一些看盤密技,其中有一項是大盤不錯時,開盤尋找那些開高(但也沒有非常高),前幾天股價漲幅不大,然後盤中拉回幅度有限的股票,他們喜歡把這種股票拉上去,從實證的回測來看,這樣的股票做隔日沖,贏的機率還真的很大。

我寫了一個日線的腳本來尋找有上述情況的股票

 

input:sp(2,"回檔最大幅度");
input:opl(2,"開高最小幅度");
input:oph(4,"開高最大幅度");
 
if open>=close[1]*(1+opl/100)
 and close<=close[1]*(1+oph/100)
 and low>open*(1-sp/100)
 and close=high
 and close[1]<close[3]*1.04//前三天漲幅不到4%
and GetSymbolField("tse.tw","收盤價","D")
>average(GetSymbolField("tse.tw","收盤價","D"),10)
and volume>average(volume,20)*1.2
then ret=1 ;

 

這個腳本的邏輯如下:

1。開的比昨天高出2%但不超過4%

2.  當天最低點跟開盤價相比,沒有跌超過2%。

3。前三天漲幅不到4%

4。成交量超過20日均量兩成

5。當天收最高。

6。加權指數在其十日均線之上

這個股本用中小型有量的股票去回測,一年期及三年期的回測報告如下:

 

06010102

 

 

 

060103

從這個回測報告來看,在上述那六點當中,除了第四點及第五點之外,其他的四點一開盤我們大約就知道有那些股票符合條件,剩下的就是如何從這些符合條件的股票中去找到那些抗跌的,有量的中小型股,然後進場等看看會不會當天收最高,如果真的收上去了,那麼短線賺錢的機率就很高。

透過這個實證,我們可以 確認一件事,那就是市場知名短線大戶x氏兄弟這招:“拉開小高先前未大漲盤中抗跌中小型股”還真的是一個賺多 賠少的好生意。

私房版 台灣50的領先指標

台灣50是一個大家很熟悉的交易工具,因著這個指數所衍生出來的ETF及權證非常的多,這些商品佔每天的成交量非常可觀,顯示這個一個大家都經常拿來作為交易工具的標的。於是我試著想要設計一個自訂指標,用來預測台灣50的多空趨勢,試了幾個方法,沒想到最簡單的卻最有用,以下是我找到的方法。

這個方法的步驟如下:

1。找出台灣50的每一檔成份股(注意會隨時異動,故要隨時更新成分股的代號),然後計算其五日均線是否在20日均線之上。

2。如果是的話就加一分,如果不是的話就不加分。

3。計算五十檔的合計分數為多少分。

如下面的腳本來描述上述的步驟

array:T50[50](0);
t50[1]=GetSymbolField("1101.tw","收盤價");
t50[2]=GetSymbolField("1102.tw","收盤價");
t50[3]=GetSymbolField("1216.tw","收盤價");
t50[4]=GetSymbolField("1301.tw","收盤價");
t50[5]=GetSymbolField("1303.tw","收盤價");
t50[6]=GetSymbolField("1326.tw","收盤價");
t50[7]=GetSymbolField("1402.tw","收盤價");
t50[8]=GetSymbolField("2002.tw","收盤價");
t50[9]=GetSymbolField("2105.tw","收盤價");
t50[10]=GetSymbolField("2207.tw","收盤價");
t50[11]=GetSymbolField("2301.tw","收盤價");
t50[12]=GetSymbolField("2303.tw","收盤價");
t50[13]=GetSymbolField("2308.tw","收盤價");
t50[14]=GetSymbolField("2311.tw","收盤價");
t50[15]=GetSymbolField("2317.tw","收盤價");
t50[16]=GetSymbolField("2324.tw","收盤價");
t50[17]=GetSymbolField("2325.tw","收盤價");
t50[18]=GetSymbolField("2330.tw","收盤價");
t50[19]=GetSymbolField("2354.tw","收盤價");
t50[20]=GetSymbolField("2357.tw","收盤價");
t50[21]=GetSymbolField("2382.tw","收盤價");
t50[22]=GetSymbolField("2395.tw","收盤價");
t50[23]=GetSymbolField("2408.tw","收盤價");
t50[24]=GetSymbolField("2409.tw","收盤價");
t50[25]=GetSymbolField("2412.tw","收盤價");
t50[26]=GetSymbolField("2454.tw","收盤價");
t50[27]=GetSymbolField("2474.tw","收盤價");
t50[28]=GetSymbolField("2633.tw","收盤價");
t50[29]=GetSymbolField("2801.tw","收盤價");
t50[30]=GetSymbolField("2823.tw","收盤價");
t50[31]=GetSymbolField("2880.tw","收盤價");
t50[32]=GetSymbolField("2881.tw","收盤價");
t50[33]=GetSymbolField("2882.tw","收盤價");
t50[34]=GetSymbolField("2883.tw","收盤價");
t50[35]=GetSymbolField("2884.tw","收盤價");
t50[36]=GetSymbolField("2885.tw","收盤價");
t50[37]=GetSymbolField("2886.tw","收盤價");
t50[38]=GetSymbolField("2887.tw","收盤價");
t50[39]=GetSymbolField("2890.tw","收盤價");
t50[40]=GetSymbolField("2891.tw","收盤價");
t50[41]=GetSymbolField("2892.tw","收盤價");
t50[42]=GetSymbolField("2912.tw","收盤價");
t50[43]=GetSymbolField("3008.tw","收盤價");
t50[44]=GetSymbolField("3045.tw","收盤價");
t50[45]=GetSymbolField("3481.tw","收盤價");
t50[46]=GetSymbolField("4904.tw","收盤價");
t50[47]=GetSymbolField("4938.tw","收盤價");
t50[48]=GetSymbolField("5880.tw","收盤價");
t50[49]=GetSymbolField("6505.tw","收盤價");
t50[50]=GetSymbolField("9904.tw","收盤價");
 
var:count(0),i(0);
count=0;
for i=1 to 50
begin
if average(t50[i],5)>average(t50[i],20)
then count=count+1;
end;
plot1(count);
plot2(40);
plot3(10);

用這個腳本的2016/05/16台灣五十成分股

畫出來台灣五十與指標的對照圖如下:

051601

從這張圖我們可以很明顯的發現

1。這個指標是台灣50的領先指標。當這個指標從10以下回昇且迅速站上40,代表大部份台灣最重要的股票,都從空頭排列轉為多頭排列,如果這時候台灣50剛處於初昇段,那後市就值得期待

2。如果這個指標從40以上跌破40,而且一去不回,或者持續低於20,那就代表大部份的權值股正處於空排排列中,這對大盤可不是太好的徵兆。

3。如果在一個多頭市場,這個指標很難跌破40,相反的,空頭市場這條線很難突破20

051601

4.如果這個指標一直在25上下遊走,代表這個盤基本上是盤整的格局

 

以上是我的一個小小嚐試,腳本中用到的Getsymbolfield是用來在腳本中支援跨商品跨頻率的方法,大家可以把這個腳本拿去改成自己更私房更好用的領先指標,從指數成份股的多空表現來預測指數後市,這個方法我個人是覺得可行的。

 

xqlite banner

 

 

多空趨勢指標

我們看到很多的技術指標,它的計算基礎都建立在單支K棒開,高,低,收的相互關係上,甚至不少只用到收盤價。過於受限於電腦的運算能力,這樣的作法可以理解,現如今進入雲端運算時代,我們不妨用更週延的思維,來找出多空的角力痕跡,今天想用兩根K棒開,高,低,收合計八個價位的運算,來跟大家介紹不同思維的交易策略。

常常有人說,投資像推理,那麼交易的軌跡就像是推理所需要的跡證,一根K棒是四個點, 兩根K棒是八個點,從兩根K棒可以收集到的多空角力跡證比一根K棒要多很多。

我試著把兩根K棒可以拿來運算的數值整理了一下,分成八類,如下圖

k線衍生的力量

其中前四個是多空力道的綜合,後面四個分別代表多頭與空頭的力量

根據這樣的分類,我寫了一個自訂指標的腳本,計算每檔商品的多空力道差距及多頭與空頭各自力量的消長。

array:k[22](0);
if close<>0
then begin
//最近一日與前一日的多空力道總差額
k[1]=(open-open[1])/close;
k[2]=(high-high[1])/close;
k[3]=(low-low[1])/close;
k[4]=(close-close[1])/close;

//當日
k[6]=(high-close)/close;
k[7]=(high-open)/close;
k[8]=(open-low)/close;
k[9]=(close-open)/close;
k[10]=(close-low)/close;
k[11]=(open-high[1])/close;
k[12]=(open-low[1])/close;
k[13]=(open-close[1])/close;
k[14]=(high-open[1])/close;
k[15]=(high-low[1])/close;
k[16]=(high-close[1])/close;
k[17]=(low-open[1])/close;
k[18]=(low-high[1])/close;
k[19]=(low-close[1])/close;
k[20]=(close-open[1])/close;
k[21]=(close-high[1])/close;
k[22]=(close-low[1])/close;
end;

array: v1[8](0);
v1[1]=k[1]+k[11]+k[12]+k[13];//隔日開盤多空總力道
v1[2]=k[1]+k[2]+k[3]+k[4];//隔日多空總力道
v1[3]=k[20]+k[21]+k[22];//隔日收盤多空結果
v1[4]=k[9]+k[10]-k[6];//當日收盤多空結果
v1[5]=k[14]+k[15]+k[16];//多頭最大力量
v1[6]=(k[17]+k[18]+k[19])*-1;//空頭最大力量
v1[7]=k[7]+k[9]+k[10];//當日多頭最大力量
v1[8]=k[6]+k[8]-k[10];//當日空頭最大力量

value1=v1[1]+v1[2]+v1[3]+v1[4];
value2=v1[5]+v1[7];
value3=v1[6]+v1[8];
plot1(average(value1,5),"多空淨力");
plot2(average(value2,5),"多頭總力");
plot3(average(value3,5),"空頭總力");

 

這個腳本可以同時衡量多空力道的差額及多頭與空頭各自的力量

用在加權指數上可以畫出的圖形就如下圖

051301

我們可以從這張圖上看到幾個可以形成交易決策的原則

1.當多空淨力在 0以上是基本上是多頭市場,0以下是空頭市場。

2.當多頭總力與空頭總力糾結時是盤整格局

3.當多頭總力與空頭總力的差距愈來愈大時代表一個多頭或空頭的趨勢被確認

4.多空淨力差距過大時代表市場一面倒,屬於超買或超賣的情況,短線有拉回或反彈的機會

 

根據這些跡證,我們就可以訂出一些更精準的交易策略

 

 

xqlite banner

 

 

 

 

把股性拿來作為過濾條件

我們在設定個股的買進策略時,有時候會踫到假的訊號,例如震盪型指標踫到盤整時,就容易出現假訊號,就算嚴格執行停損,還是會因為過度交易,浪費交易成本而必影響獲利,今天來跟大家考論一個概念,如果我在寫一個股性轉變的濾網,當策略出現買進訊號時,透過這個濾網來觀察股性是否真的有明顯改變,只有真的有明顯改變時才觸發訊號,這麼做應該可以避免過度交易的情況

我曾經跟大家分享過我有十二個衡量股性的標準

衡量股性的指標

我試著用計分卡的方式寫了一個衡量股性的腳本如下:

input:day(20);
input:ratio(10);
var:count(0),x(0);
value1=GetField("總成交次數","D");
value2=average(value1,day);
value3=GetField("強弱指標");
value5=GetField("外盤均量");
value6=average(value5,day);
value7=GetField("主動買力");
value8=average(value7,day);
value9=GetField("開盤委買");
value10=average(value9,day);
value11=GetField("資金流向");
value13=countif(value3>1,day);
value14=average(value13,day);//比大盤強天數
value16=GetField("法人買張");

count=0;
if value1>value2*(1+ratio/100)
then count=count+1;
if value13>value14*(1+ratio/100)//比大盤強的天數
then count=count+1;
if value5>value6*(1+ratio/100)
then count=count+1;
if value7>value8*(1+ratio/100)
then count=count+1;
if value9>value10*(1+ratio/100)
then count=count+1;
if truerange> average(truerange,20)//真實波動區間
then count=count+1;
if truerange<>0
then begin
if close<=open
then
value15=(close-low)/truerange*100
else
value15=(open-low)/truerange*100;//計算承接的力道
end;
if value15>average(value15,day)*(1+ratio/100)
then count=count+1;
if volume<>0
then value17=value16/volume*100;//法人買張佔成交量比例

if value17>average(value17,10)*(1+ratio/100)
then count=count+1;

if value11>average(value11,10)*(1+ratio/100)
then count=count+1;
x=0;
value18=summationif(close>=close[1]*1.02,x,5);
if value18>=2 
then count=count+1;//N日來漲幅較大的天數



value19=GetField("融資買進張數");
value20=GetField("融券買進張數");
value21=(value19+value20);
value22=average(value21,day);
if value21<value22*0.9 //散戶作多指標
then count=count+1;

plot1(average(count,3),"股性綜合分數指標");
plot2(average(count,day),"移動平均");

從以下幾檔這個月逆勢上漲的股票,我們可以發現,股票有大行情時,股性會有明顯的變化

051201

 

051202

 

各位不妨以這個例子為基礎,發展各自不同的股性過濾腳本,這樣就可以減少過度交易及盤整時出現假訊號的機率

 

 

 

xqlite banner