Author Archives: 發財橘子

雲端策略中心精進版之37~開高後不拉回的中小型股

以前台股只有幾百檔的時候,我有個同事,每天早上都拿了一份在K線圖上畫了很多圈圈的財訊快報來公司,被他圈中的股票,都有兩個特徵,一是先前漲幅不大,二是昨天開高收最高,現在台股有1500檔,要一檔一檔挑這樣的股票財訊快報也不再提供線圖了,我試著把這樣的精神寫成交易策略,回測後我發現,這樣的作法,只能用在好股票上,而且,收盤收最高很重要。

我寫的腳本如下

if GetSymbolField("tse.tw","收盤價","D")
>average(GetSymbolField("tse.tw","收盤價","D"),10)
//大盤多頭
then begin
input:sp(2,"回檔最大幅度");
input:opl(1.5,"開高最小幅度");
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.1
//前三天漲幅不到10%

and volume>average(volume,20)*1.2
//成交量增加一定百分比]
then ret=1 ;
end;

在回測設定時,我用的是高股利或高ROE的股票(現金股利過去三年都至少兩元或是ROE超過25%),出場是設五天後或是8%的停損停利。

2016110207

回測報告如下

2016110206

過去三年完全符合這樣條件的次數不算多,但賺的時候賺不少,虧的時候虧不多,勝率也接近六成,屬於穩定獲利型的策略。

但如果同樣的腳本用在其他非績優股上,或是不堅持一定要收最高,績效就差蠻多的

 

雲端策略中心精進版之38~火箭後拉回的中小型股

我們常常在盤中看到一些中小型股票突然間往上衝,然後我們常常就會忍不住地想要進場共襄盛舉,今天的這個交易策略是在尋找那些在五分鐘之內曾經往上沖之後,收盤稍稍接回的小型股,從回測的數字來看,在多頭市場,這樣的短多策略,還是有一定的績效

我寫的腳本如下

 if GetSymbolField("tse.tw","收盤價","D")
 > average(GetSymbolField("tse.tw","收盤價","D"),10)
then begin 
 if barfreq ="Min" and barinterval =1 
 and close[1]/close[2]>1.02
 and highest(high,250)<=lowest(low,250)*1.07
 then 
 ret=1;
end;

回測設定時,我用的是有量的中小型股,停利是6%,停損是5%,由於是用五分鐘K去跑,所以我只先回測一年

2016110301

 

回測報告如下:

2016110302

 

從回測的數字來看,在大多頭市場,中小型的股票如果盤中急拉後稍為回檔整理,  確實是值得觀察的一個族群,我如果把停損停利都設為5%,勝率甚至達到六成。

2016110303

但這個策略在大盤經常殺尾盤的空頭市場,風險還是蠻大的,在應用上還是要選擇大多頭市場比較合適。

 

xqlite banner

 

雲端策略中心精進版之36~即將鎖第一根漲停的中小型股

快漲停的股票到底要不要追啊? 市場老手們常說,如果不是牛皮股,而且是第一根,那就追,如果不是就算了。我寫程式去回測的結果發現,快漲停的股票,如果是股本小於70億元且過去三年每年現金股利都超過兩元,或是股東權益報酬率超過25%的公司,那麼放膽去追,擺五天,賺錢的機率超過六成。

為了找出即將漲停的股票,我寫的腳本如下

if GetSymbolField("tse.tw","收盤價")
>average(GetSymbolField("tse.tw","收盤價"),10)
then begin


input:Length(20, "過去無漲停期數");
input:Ratio(1, "差幾%漲停");


Condition1 = Close >= GetField("uplimit") * (1 - Ratio/100);
Condition2 = TrueAll(Close < GetField("uplimit"), Length);
Condition3 = Average(Volume, 5) >= 1000;
Condition4 = Close > Highest(High[1], Length);
Condition5 = Volume >= Highest(Volume[1], Length);

ret = Condition1 And Condition2 And Condition3 And Condition4 And Condition5; 

end;

回測設定我用的是連續三年現金股利都超過兩元或是股東權益報酬率超過兩成五的股票,由於是去追漲停,所以只能短線操作,我的出場是設五天後。

2016110204

回測報告如下

2016110203

勝率接近六成。

如果我拿來篩選的股票除了符合上述兩個條件,股本還要小於70億元,那回測的結果如下:

2016110205

經過股本的篩選後,勝率提高到六成以上。

 

 

xqlite banner

雲端策略中心精進版之35~近期持續強勢股階段式上漲

以前市場有個很有名的開盤八法,其中有一個說法是,如果開盤起算的五分鐘K 線,連續三根都收紅,那麼當天收高的機率就比較高,我寫了腳本想要印證這樣的說法是否正確,結果發現,最近漲的不兇,但這兩日走勢比大盤強,今天開盤前十五分鐘又維持連續三根五分鐘K都收紅,那麼作多贏的機率確實比較大。

我試了不少的方向,最後的發現是,符合以下條件下的開盤三紅K,會有比較高的勝率

1.大盤多頭

2.前兩個交易日走勢比加權指數強

3.近十日漲幅沒有大兇

4.開盤前三根五分鐘K都收紅

5.開盤前三根五分鐘K的平均成交量明顯比先前放大

我寫的腳本如下

 

if GetSymbolField("tse.tw","收盤價","D")
>average(GetSymbolField("tse.tw","收盤價","D"),10)
//多頭市場
and GetSymbolField("tse.tw","收盤價","D")
/ GetSymbolField("tse.tw","收盤價","D")[2]+0.01
<GetField("收盤價","D")/GetField("收盤價","D")[2]
//前兩日比大盤明顯走強
and GetField("收盤價","D")[1]
<GetField("收盤價","D")[10]*1.07
//近十日沒有漲的太兇
then begin

if barfreq<> "Min"and barinterval<> 5
then raiseruntimeerror("本腳本只限五分鐘線");
if time=091500
and trueall(close>close[1],3)
//開盤三根五分鐘線都是紅棒
and average(volume,3)>average(volume,20)*1.3
//開盤的量能明顯增加
then ret=1;
end;

回測設定我是用有量的中小型股,停損停利都設7%

2016110101

回測報告如下:

20161101

勝率接近六成,不過大盤走大空頭時,用這個策略還是大多以停損出場,這策略比較適合在大多頭市場中使用。

如果擔心這個策略輸的時候輸的很慘,另一個方法是把它當成當沖策略,我用進場後的第51根K棒出場來回測,回測報告如下:

2016110201

勝率雖然比較低,但還是有55%,但最大連續虧損及最大區間虧損就都回到合理的範圍了。

最後,我在檢視回測中出現虧損的個股股價走勢,我發現那種前一天下跌的股票,今天出現紅三K的時候,尾盤收高的機會較大,所以我在腳本中加上一個條件

and GetField("收盤價","D")[1]<GetField("收盤價","D")[2]

加上這個條件後的回測報告如下

2016110202

加上這條件後的勝率達到68%,更難能可貴的是,最大連續虧損及最大區間虧損只有 7%。

 

早先公司在開發XS這套軟體的時候,常有朋友勸我說,台灣會寫程式又會做交易的人很有限,你們花這麼多資源做這產品,能賣幾個人呢? 當時我其實心裡也是毛毛的,怕做出曲高和寡的產品,這陣子我用了這項服務之後,我發現,它讓我可以在有任何的Trading idea時,都可以寫成程式去回測,再根據回測的結果不斷的修正程式,最後理解到一個Trading idea在什麼情況下,會work,什麼情況下,聽聽就好,這種拿所有個股的交易及財報資料來作運算,找出在什麼情況下,有較大機率股價會上漲或下跌,其實是大數據分析的一種實踐。

在有這種體會之後,其實我就比較篤定了。因為,這真的可以幫到我。

xqlite banner

雲端策略中心精進版之34~多頭轉強策略

每次當自己看好的股票股價翻紅時,我們總面臨了天人交戰: “追還是不追”,追嘛怕追到盤整的高點,不追怕這是大漲的起點。今天我想介紹一個策略,這個策略是把一定區間內的上漲跟下跌絕對值分別計算並算出加權平均,當兩者比例非常懸殊時,代表區間內多方很明確地佔了上風,這是一個判定股價是翻明確翻多的交易策略,從回測的數據來看,這個策略還蠻值得大家參考的。

我先把上面說的邏輯寫成一個指標腳本

input:length(10); 
variable: sumUp(0), sumDown(0), up(0), down(0),RS(0);
if CurrentBar = 1 then
begin
sumUp = Average(maxlist(close - close[1], 0), length); 
sumDown = Average(maxlist(close[1] - close, 0), length); 
end
else
begin
up = maxlist(close - close[1], 0);
down = maxlist(close[1] - close, 0);
 
sumUp = sumUp[1] + (up - sumUp[1]) / length;
sumDown = sumDown[1] + (down - sumDown[1]) / length;
end;
if sumdown<>0
then rs=sumup/sumdown;
plot1(rs);

根據這個腳本畫出來的指標如下

2016103101各位可以發現,當RS超過4的時候,代表多頭的漲勢非常明確

我把這個指標改寫成策略腳本

if getsymbolfield("tse.tw","收盤價")

>average(getsymbolfield("tse.tw","收盤價"),10)

then begin







input:length(10);

variable: sumUp(0), sumDown(0), up(0), down(0),RS(0);

if CurrentBar = 1 then

begin

sumUp = Average(maxlist(close - close[1], 0), length);

sumDown = Average(maxlist(close[1] - close, 0), length);

end

else

begin

up = maxlist(close - close[1], 0);

down = maxlist(close[1] - close, 0);




sumUp = sumUp[1] + (up - sumUp[1]) / length;

sumDown = sumDown[1] + (down - sumDown[1]) / length;

end;

if sumdown<>0

then rs=sumup/sumdown;

if rs cross over 4

and close>close[1]*1.02

//最近一日漲幅超過2%

and close<close[5]*1.05

//最近五日漲幅小於5%

then ret=1;




end;

 

回測時我用有量的中小型股,由於我設的計算區間是10天,所以我出場設定是進場後10天

2016103103

回測報告如下

2016103102

從回測報告顯示,這個策略在過去三年共出現279個交易訊號,有173次獲利,勝率達到62%。

如果各位希望風險低一點,可以把區間拉長,這樣勝率雖然較低,但風險也會降低不少。

xqlite banner

 

雲端策略中心精進版之33~低預估本益比攻勢發動

 

股票的價格,絕大多數的時候,是隨著大盤的多空氣氛,隨著產業的展望,順勢波動,隨波逐流,但就像潮汐一樣,退潮之後總是會轉為漲潮,所以我們可以找出那些現在股價距離平均水準還有一段距離,但開始轉強的公司,期待這些公司是正在從退潮要轉成漲潮。

這樣的公司,需要符合兩個條件

1.總市值不到600日平均的七成

2.收盤價創十日最高價

 

根據這兩個條件,我的對應腳本如下

settotalbar(700);
if getsymbolfield("tse.tw","收盤價")
> average(getsymbolfield("tse.tw","收盤價"),10)
then begin
value4=GetField("總市值");
value5=average(value4,600);
if value4[1]<value5[1]*0.7
and close=highest(close,10)
then ret=1;
end;

 

回測設定我用的是過去每年EPS都超過兩元的股票,出場點是設為進場後10天出場

2016102702

回測報告如下:

2016102703

勝率約57%,造成虧損的時點,主要是在大盤走長期空頭走勢的時段

如果把這個腳本用有量的中小型股來跑,回測報告如下

 

2016102704

勝率甚至超過6成

 

這樣的策略,它的核心精神有三個

1.在多頭市場之下

2.總市值離三年來的平均值有不小的距離

3.股價正在轉強

符合這三個條件的股票,就極可能符合這個交易策略。

其次,我們在腳本上試的是目前總市值不到長期平均值七成的股票,如果現在股價是不到長期平均值五成時,勝率其實更高

2016102705

回測數字為證,勝率都快接近七成了。

 

xqlite banner

 

 

雲端策略中心精進版之32~低PB股的逆襲

“低價股如果股價創了近一個月新高且離底部不遠,往往有短線作多的空間”,這段話是以操作低價股創造了不錯蹟效的一位法人跟我說過的話。

他的邏輯是,股價低於15元的股票,基本上就是股票市場上的魯蛇,這種股票通常不會有啥表現,但如果股價可以站上一個月來新高點且距離一個月來的低點不遠,技術面通常線型不會太差,基本面則可能有些不一樣,如果跟長期的高點股價還有點距離的話,那麼短線作多的勝率應該就不低。

要符合上述條件的股票,應該要有以下的特徵

1.股價低於15元。

2.今日最高價創20日以來新高

3.今日收盤價距離20日以來的低點不到7%

4.股價距離40日以來的高點還至少有一成以上的空間

我根據上述的特徵寫的腳本如下:

if GetSymbolField("tse.tw","收盤價")
 > average(GetSymbolField("tse.tw","收盤價"),10)
then begin
 
 if close<15
 and H = highest(H,20)
 and close<lowest(low,20)*1.07
 and highest(h,40)>close*1.1
 then 
 ret=1;
 
end;

回測設定  我是用所有的股票下去跑三年,停損點設5%,停利點設7%

091318

回測報告如下:

2016102701

從回測報告來看,這些低PB的低價股,一旦站上一個月來的高點,還真的是一個短線可以作多的訊號。

然後我發現,這個策略不旦可以作短,其實作波段也很好用,以下是我把出場點改成進場後二十天

2016102702

 

雖然勝率略降了一點,但總報酬率高出許多,且連續虧損也比短線操作要小,顯示這個策略會抓到那些長線回升的低價股。

這個策略的語法很簡單,但勝率卻出奇的高,算是市場經驗轉化成交易策略的一個成功的例子。

 

xqlite banner

 

雲端策略中心精進版之30~跌破糾結均線

糾結均線代表的是短中長期持股者的成本都接近一致,一旦突破,賣壓很輕,同樣的道理,一旦跌破,代表短中長期的持股者大家都同時被套牢,這種情況會造成,股價一旦反彈,馬上就會面臨極大的賣壓,所以跌破糾結均線,是可信度極高的波段空頭策略,特別是對那些長期不大賺錢的大型股,更是如此。

跌破糾結均線的腳本,跟突破糾結均線的腳本差不多

if GetSymbolField("tse.tw","收盤價")
<average(GetSymbolField("tse.tw","收盤價"),10)
then begin

input: shortlength(5); setinputname(1,"短期均線期數");
input: midlength(10); setinputname(2,"中期均線期數");
input: Longlength(20); setinputname(3,"長期均線期數");
input: Percent(5); setinputname(4,"均線糾結區間%");
input: XLen(20); setinputname(5,"均線糾結期數");

input: Volpercent(25); setinputname(6,"放量幅度%");//帶量突破的量是超過最長期的均量多少%
variable: shortaverage(0);
variable: midaverage(0);
variable: Longaverage(0);
variable: AvgHLp(0),AvgH(0),AvgL(0);

shortaverage = average(close,shortlength);
midaverage = average(close,midlength);
Longaverage = average(close,Longlength);
 
 
AvgH = maxlist(shortaverage,midaverage,Longaverage);
AvgL = minlist(shortaverage,midaverage,Longaverage);

if AvgL > 0 then AvgHLp = 100*AvgH/AvgL -100;

condition1 = trueAll(AvgHLp < Percent,XLen);
condition2 = V > average(V[1],XLen)*(1+Volpercent/100) ;
condition3 = average(Volume[1], 5) >= 2000;
condition4 = C < AvgL *(0.98) and L < lowest(L[1],XLen);

ret = condition1 and condition2 and condition3 and condition4;
end;

不過在回測設定時,我用的是不大賺錢的大型股,出場是進場後二十天後

091314

回測報告如下

091313

我們可以看得出來,這是一個勝率超過六成的波段作空策略

 

xqlite banner

 

 

雲端策略中心精進版之29~突破糾結均線

突破糾結均線一般被視為一個重要的買進訊號,因為這代表不管短中長期的持股者,都處於剛剛賺錢的狀態,所以解套的賣壓很輕,獲利了結的賣壓也不大,只要買盤持續,後市向上的機率比較高,為了印證這樣的市場印象,我寫了一個對應的腳本,但不是所有的股票,突破糾結均線後作多都是一個績效良好的交易策略,實證上發現,唯有高ROE的股票,如果出現糾結均線突破時,才有有較高的勝率。

對於糾結均線突破,我寫的腳本如下

if GetSymbolField("tse.tw","收盤價")
>average(GetSymbolField("tse.tw","收盤價"),10)
then begin


input: shortlength(5); setinputname(1,"短期均線期數");
input: midlength(10); setinputname(2,"中期均線期數");
input: Longlength(20); setinputname(3,"長期均線期數");
input: Percent(5); setinputname(4,"均線糾結區間%");
input: XLen(10); setinputname(5,"均線糾結期數");

input: Volpercent(25); setinputname(6,"放量幅度%");//帶量突破的量是超過最長期的均量多少%
variable: shortaverage(0);
variable: midaverage(0);
variable: Longaverage(0);
variable: AvgHLp(0),AvgH(0),AvgL(0);

shortaverage = average(close,shortlength);
midaverage = average(close,midlength);
Longaverage = average(close,Longlength);
 
AvgH = maxlist(shortaverage,midaverage,Longaverage);
AvgL = minlist(shortaverage,midaverage,Longaverage);

if AvgL > 0 then AvgHLp = 100*AvgH/AvgL -100;

condition1 = trueAll(AvgHLp < Percent,XLen);
condition2 = V > average(V[1],XLen)*(1+Volpercent/100) ;
condition3 = C > AvgH *(1.02) and H > highest(H[1],XLen);
condition4 = average(volume[1], 5) >= 1000; 

ret = condition1 and condition2 and condition3 and condition4;

end;


回測設定  我用的是高ROE的股票,停損停利都設10%

102402

回測報告如下

102401

 

勝率很高,虧錢的時段都是在大空頭市場中,所以如果在多頭市場高ROE的股票出現這種情況, 還真的是一個不錯的買進訊號。

 

我試著用所有的股票去跑,用有量的中小型股去跑,勝率都不如高ROE的股票高,顯示這個交易策略對績優股比較有用。

 

 

xqlite banner

雲端策略中心精進版之28~平台整理後跌破

這陣子介紹了不少從繼續型態發展出來的策略,當中的多頭策略,可以協助我們找到那些在長期多頭走勢中休息後準備再出發的股票,當中的空頭策略,則常能讓我們對手中持股要留要砍,下定決心。

在這諸多繼續型態當中,平台整理是一個很常發生的型態,平台整理之後,可能往上,但也可能往下,在一段跌勢之後,一旦跌破整理區,股價繼績下跌的機率很高。

跟平盤整理後突破一樣,平盤整理後跌破有四個要件

1.整理型態前30天跌幅超過1成。

2.整理期間最高點與最低點之間差不到7%

3.整理期間最高點與第四高點間差不到2%

4.整理期間最低點與第四低點間差不到2%

把這四點畫成圖形,就像下面這張圖

102403

我寫的腳本如下

if GetSymbolField("tse.tw","收盤價")
<average(GetSymbolField("tse.tw","收盤價"),10)
then begin

input:Period(15, "平台區間");
input:ratio(7, "整理幅度(%)");
input:ratio1(2,"各高點(低點)間的差異幅度");
var:h1(0),h2(0),L1(0),L2(0);
h1=nthhighest(1,high[1],period);
h2=nthhighest(4,high[1],period);
l1=nthlowest(1,low[1],period);
l2=nthlowest(4,low[1],period);

if (h1-l1)/l1<=ratio/100
and (h1-h2)/h2<=ratio1/100
and (l2-l1)/l1<=ratio1/100
and close cross below l1
and close[period+30]>l1*1.1
then ret=1;
end;

回測設定我用的是不大賺錢的中大型股,出場設定是十天。

102402

回測報告如下

102301

回測報告顯示,在172次的交易機會裡,有111次獲利出場,61次虧損,勝率蠻高的。

而它的連續虧損情況,相較於連續獲利情況,小了很多,顯示這是一個賺的時候大賺,賠的時候小賠的策略

 

xqlite banner