Author Archives: 發財橘子

大跌後出現什麼K線型態可以進場?

這一波的下跌來勢不善,陸續被問到大跌後踫到什麼情況可以進場買股票? 今天我從K線型態出發,來看看股價如果跌三成後,出現的幾種K線組合,那一種回昇的機率較高。

 

首先我寫了一個函數叫BKPatterm,把幾個常見的多頭反轉K 線組合都包含在這個函數裡,由於此函數回傳類型為字串型態,故新增函數腳本時記得回傳類型勾選”字串”

20171208_字串

我寫的腳本如下:

settotalbar(5);
condition2 = (minlist(open,close)-Low) > absvalue(open-close)*3; 
condition3 = minlist(open, close) > low* (100 + 2)/100;

if trueall( condition2 and condition3, 3)
then bkpatterm="三長下影線";


{[檔名:] 紅三兵 
[說明:] 連續三根上漲實體K棒 
} 
 
condition1= ( close - open ) >(high -low) * 0.75;
//狀況1:實體上漲K棒
condition4= ( close[1] - open[1] ) >(high[1] -low[1]) * 0.75;
//狀況2:前一根也是實體上漲K棒
condition5= ( close[2] - open[2] ) >(high[2] -low[2]) * 0.75;
//狀況3:前前根也是實體上漲K棒
condition6= close > close[1];
//狀況4: 上漲
condition7= close[1] > close[2];//狀況5:上漲
{結果判斷} 
IF 
 condition1
 and condition4
 and condition5
 and condition6
 and condition7
THEN bkpatterm="紅三兵"; 

condition8= ( open[2] - close[2] ) >(high[2] -low[2]) * 0.75;
//狀況1:實體下跌K棒
condition9= ( close[1] - open[1] ) >(high[1] -low[1]) * 0.75;
//狀況2:實體上漲K棒
condition10= high[1] < high[2] and low[1] > low[2];
//狀況3:前期內包於前前期
condition11=( close - open ) > 0.75 *(high -low);
//狀況4:當期實體上漲K棒
condition12=close > open[2];
//狀況5:現價突破前前期開盤價
IF condition8
 and condition9
 and condition10
 and condition11
 and condition12
THEN bkpatterm="內困三日翻紅"; 


condition13=open = High and close < open ;//狀況1: 開高收低留黑棒
 condition14=(high -low) > 2 *(high[1]-low[1]) ;//狀況2: 波動倍增
 condition15=(close-low)> (open-close) *2 ;//狀況3: 下影線為實體兩倍以上
 
IF condition13
 and condition14
 and condition15
THEN bkpatterm="吊人線"; 


condition16=(open[1] - close[1] ) >(high[1] -low[1])*0.75;
//狀況1:前期出黑K棒
condition17=( close - open ) >(high -low) * 0.75;
//狀況2:當期紅棒
condition18=high > high[1];
//狀況3:高過昨高
condition19=open<low[1];
//狀況4:開低破昨低 
IF condition16
 and condition17
 and condition18
 and condition19
THEN bkpatterm="多頭吞噬"; 

{ 
[檔名:] 多頭執帶 
[說明:] 開在最低點一路走高收在最高點附近的K棒 
}
condition20=close>open; 
condition21=(Close-Open)>(high-low)*0.9;
condition22=Close>Close[1]+high[1]-low[1]; 
IF condition20
 and condition21
 and condition22
THEN bkpatterm="多頭執帶"; 

{ 
[檔名:] 多頭母子 
[說明:] 前期收長黑K棒 今期開高小幅收紅不過昨高 
} 
 
 
condition23=( open[1] - close[1] ) >(high[1] -low[1])*0.75;
//狀況1:前期出長黑K棒
condition24=close[3]-close[2]<close[2]-close[1]; 
//狀況2:前期呈波動放大下跌
condition25=( close - open ) >(high -low) * 0.75;
//狀況3:當期紅棒
condition26=high < high[1];
//狀況4:高不過昨高
condition27=low>low[1];
//狀況5:低不破昨低
 
IF 
 condition23
 and condition24
 and condition25
 and condition26
 and condition27
THEN bkpatterm="多頭母子";

{ 
[檔名:] 多頭遭遇 
[說明:] 前期收黑K棒 當期開低走高紅棒嘗試反攻昨收 
}
 
condition28= (open[1] - close[1] ) >(high[1] -low[1]) * 0.75;
//狀況1:前期出黑K棒
condition29= close[1] < close[2];
//狀況2:前期收跌
condition30= ( close - open ) >(high -low) * 0.75;
//狀況3:當期收紅K棒
condition31= open < close[1] and close < close[1];
//狀況4:開低且收跌
condition32= low < low[1];//狀況5:破前期低點
{結果判斷} 
IF 
 condition28
 and condition29
 and condition30
 and condition31
 and condition32
THEN bkpatterm="多頭遭遇";

有了這個腳本,接下來的策略腳本就變的很簡單寫,例如我如果要找大跌三成後出現紅三兵的股票,就可以像下面這樣寫

if close*1.3<close[30]
and bkpatterm="紅三兵"
then ret=1;

如果想找跌三成後出現吊人線的股票,就把腳本中的紅三兵改成吊人線就可以了。

在這個腳本裡,我一共把八種多頭K線型態包含到BKPatterm這個函數中,分別是

三長下影線

三長下影線

紅三兵

紅三兵

內困三日翻紅

內困三日翻紅

吊人線

吊人線

多頭吞噬

多頭吞噬

多頭執帶

多頭執帶

多頭母子

多頭母子

多頭遭遇

多頭相逢

接下來就用上面的腳本分別回測這些型態在個股大跌三成後出現該型態後的二十天後股價是上漲還是下跌,以下是過去三年的回測數字

大跌後的K線型態勝率

從這些數字來看,多頭遭遇出現的次數多,勝率高且平均報酬率也高,是最具實戰意義的K線型態。

 

用CANSLIM選股法則來說明XS選股平台的四種選股條件產生方法

William J. ONeil(威廉歐尼爾)是美國知名的成長型投資大師,他寫的笑傲股市這本書到現在賣超過100萬本,他創的投資者日報,全美訂戶超過30萬戶,他在研究每年美國上漲最兇猛的股票後,發明了CANSLIM選股法則,今天就以CANSLIM法則來做例子,跟大家分享如何透過XS選股中心這個平台,運用系統內建的選股條件,加上系統內建的排行條件,加上自己寫的選股腳本,再加上自己寫的排行條件,完成一個自創的選股系統。

首先我先說明CANSLIM是那七個條件

C:當季EPS成長率至少18~20%(Current quarterly earning per share must be up at least 18~20%)。

A:過去五年EPS顯著成長,複合成長率超過15%(Annual earning per share should be meaningful growth over the last five years, the annual compounded growth rate of earnings in the superior firms should be from 15% to 50%, or even more per year)。

N:新產品、新管理階層或股價創新高 (Buy companies with new products, new management, or significant new changes in their industry conditions, and most important, buy stocks as they initially make new highs in price. Forget cheap stocks—they are usually cheap for a good reason)。

S:流通在外股數少,非大型股,非老公司(Shares outstanding should be small or of reasonable number, not large capitalization, older companies)。

L:漲幅領先市場其他股票,股價表現是績優生(Leader :the 500 best performing stocks from 1953 to 1990 averaged a relative price strength of 87)。

I:機構法人買超(Institutional sponsorship:Buy stocks with at least a few institutional sponsors with better than average recent performance records)。

M:市場走向(Market Direction)。

基於上述的規則,我的選股系統,需符合下面幾個規則:

C:最近兩季EPS平均年增率排在前面

A:過去五年EPS複合成長率超過15%

S:總市值小於300億台幣

L:過去兩年漲幅屬於領先群

I: 投信,外資持有一定張數

在XS上,要完成一個選股系統,得先在選股中心的UI上按新增的ICON,接著就會跳出以下的畫面

選股步驟

依序填好選股策略名稱及選股範圍之後,XS的選股中心一共提供了四種的選股條件產生方式

  1. 系統內建的條列式選股條件,使用者只要調整參數即可
  2. 系統內建的排行規則,使用者也只要調整參數即可
  3. 使用者可以自行透過編輯器撰寫的選股腳本,系統會把符合腳本條件的股票,再跟其他條件一起透過AND 或OR的關連來篩選股票
  4. 使用者可以自行透過編輯器撰寫選股函數,再透過自訂排行條件的功能,自建一個排行規則。

XS選股平台為何會提供這麼多種選股條件的產生方式呢? 這是因為,在制定選股條件時,有時必須某值超過某絕對值,例如EPS要超過兩元,但有時只需要在所有股票裡排在前面即可,例如外資一個月的買超累計排名前30名,所以必須分成絕對值的篩選及排行的篩選,而系統內建的條件不見得能滿足使用者的想法,所以才會再提供讓使用者可以透過編輯器自行撰寫選股及排行條件的功能。

以上圖CANSLIM的條件為例

總市值小於300億這個條件系統有內建,我們直接從”選股條件”這個頁籤裡,找出總市值這個欄位,就會找到這個選股條件,把參數填上 3 00,再如上圖的按加號即可以把這個條件加入選股系統中

接下來使用系統內建的排行規則,可以找到年漲跌幅排在前510名的股票。

接著要找出最近兩季EPS平均年增率排在前面的股票,要怎麼挑呢?

首先我們先寫一個函數來計算出最近兩季EPS平均年增率這個值,寫法如下

value1=GetField("每股稅後淨利(元)","Q");
value2=(value1/value1[4]-1)*100;//年增率
value3=(value2+value2[1])/2;
ret=value3;

然後從選股中心裡開啟一個新的選股條件,然後用自訂排行條件這個功能,分別設定這兩個函數計算結果的排行榜,例如都取前一百名,然後透過and這個條件,就可以挑出符合兩個條件排行前一百名的股票。

 

最後是在股價面上,如果要符合CANSLIM的標準,必須符合兩個條件

1.股價創一年新高。

2.大盤在多頭。

符合上述兩個條件的警示腳本如下:

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

這是股價創兩百日新高且加權指數在月線之上。

綜合以上的選股及警示腳本,就可以完成私房版的CANSLIM交易策略,而這當中的選股方法,我們用到了系統內建的條列式選股條件,也用到了系統內建的排行榜,用了一個自己寫的選股腳本,也用了一個自訂的函數來作排行,這是XS選股平台所提供的四種不同的選股條件產生方式,再搭配上AND與OR的串接,來努力把user的選股思維化成一個電腦可以自動執行的對應程式。這應該是XS選股平台跟坊間其他產品最大的不同吧。

 

打造專屬的當沖操盤室

網友問我有沒有不錯的當沖策略,老實說,我試到現在,還真沒有一個策略可以一直賺錢。所以我想直接跟大家完整報告我的做法,如果各位不嫌棄,可以用這樣的作法,打造自己專屬的當沖操盤室。

首先 ,我把整個操作的架構畫成以下這張圖

當沖架構圖

我的當沖流程一共分成四個步驟

步驟一:  先透過選股腳本,每天回家後跑出一份可以作多的股票清單跟一份作空的股票清單,作空的清單比較簡單: 就一個選股法: 不大賺錢的大型股,因為這種股票大盤跌的時候比較不會有人去買,順勢而下的機率很大,我習慣作空時就空這一類的股票。我設的條件有兩個

1.最新股本大於50億元

2.連續五年EPS都小於0.5元

至於作多的選股條件就比較多樣化,包括籌碼面的,基本面的,基本上就是那些市場認同度較高,會有人照顧的中小型股。

步驟二: 決定多空比例。  除非進入主跌段,不然多頭訊號出現的股票我還是會挑出一些來先買後賣,比例基本上就是盤整或看不懂時,多空各五成,主跌段時不作多單,其餘時間點就看大盤位於那個階段來調整多空比例

步驟三: 把多空選股出來的清單去跑各種盤中的Sensor

這些senosr其實不少都是雲端策略提供的,他的目的是從上面那些股票中找出今天價量異常,波動性可能會比較大的。

步驟四: 再把步驟三跳出來的股票去用個股儀表板檢視,以當沖作多為例,目的在於看看這些股票近期是否買進訊號連發,因為如果是的話,代表作多贏的機率會大一些,這是有點長線保護短線的概念。

透過這四個步驟,我如果有空看盤就作一下,如果沒空看盤就算了。

接下來跟大家介紹這四個步驟在XQ上如何自設看盤的畫面

首先,先把要當沖作多的股票 清單及作空的股票清單都設成一組每天會依選股條件更新的自選股,以作多為例,我設了一個選股條件叫作當沖作多股,條件如下圖的右上方,今天挑出了共176檔

作多選股

然後按下”每日自動執行”的icon,系統就會自動每天把符合條件的股票,存成一組叫”當沖作多股”的自選股。

 

接下來,打開策略雷達,把盤中要跑的sensor,用這組”當沖作多股”去跑,例如下圖我用階梯式上漲這個策略雷達,在執行商品的地方就選組合,然後在 自動選股清單中找到當沖作多股後按完成即可把這個策略只跑符合上述選股條件的股票。

策略雷達

並且設定成每天固定時間會跑的排程(如下圖)

 

排程

按照上述的作法,把每個盤中要跑的雷達都設好排程

完整排程

完成以上的步驟,就可以讓系統在盤中把符合策略雷達的當沖標的呈現在警示中心這個mode裡。

但要把警示中心這個mode跟個股儀表板整合在一起,需要用到自訂頁面的功能

首先,在XQ的Menu的最左邊檔案裡選”開啟新頁” ,接著按建立空白頁面的icon,然後依您的想法切割畫面,警示中心是在即時監控這個mode,我設計的看盤畫面如下

當沖看盤室

左上方是根據上述的步驟,每天符合策略雷達時盤中會跑出來的標的,左下方是該股的分時圖,右上方是個股儀表板,右下方是大盤的分時圖

左邊出訊號,右邊check是不是值得追。

以上是我當沖交易的作法,給各位參考,至於怎麼選出當沖作多的股票,怎麼設策略雷達,怎麼設個股儀表板,每個人的想法不見得一樣,就看各位發揮巧思了。

 

 

 

在K線圖上標進出場點

在K線上標出進出場點,是不少網友希望可以學起來的技能,今天就以創N日新高及創N日新低作為進出場點,來跟大家作示範

首先,要在K線上標示進出場點,要用的是自訂指標的功能,所以先在XScript編輯器,新增一個自訂指標的腳本,然後開始撰寫如下的腳本

input:n(20,"期別");

//設定進場點標示的位置
switch(close)
begin
case >150: value5=low*0.9;
case <50 : value5=low*0.98;
default: value5=low*0.95;
end;

//設定出場點標示的位置
switch(close)
begin
case >150: value6=high*1.1;
case <50 : value6=high*1.02;
default: value6=high*1.05;
end;

if close=highest(close,n)
and barslast(close=highest(close,n))[1]>=20
//上一個創n日新高的進場點在20天以前
then plot1(value5);
if close=lowest(close,n)
and barslast(close=lowest(close,n))[1]>=20
then plot2(value6);

在這個腳本裡用到barslast這個函數,這是用來限定顯出進出場訊號時,過濾掉在短期內不斷重覆的訊號。

接下來就開始在K線圖上點滑鼠右鍵,選”設定”這個功能,然後選擇主圖重疊的頁籤,在視窗中設定如下圖

2017120503

先從左邊的腳本清單中把上面寫的這個腳本加到右欄中,然後點選繪圖樣式這個頁籤,把”型式”從下拉選單中選成”點”,然後再點選”樣式”,從圖示中挑出您要標示的進出場點符號,並且選擇符號的大小,最後按確認即可。

畫出來的圖如下

2017120504

學會了這個技巧,未來不管因為什麼原因加入觀察名單的股票,都可以用自選股與K線圖連動的方式來一檔一檔檢視其進出場的點位

 

學程式交易語法的終南捷徑

隨著當沖交易佔成交量比重的節節高昇,愈來愈多的交易者試著透過程式交易來賺取電光火石間的差價,但在學會基本的變數,參數等概念之後,往往不知從何開始寫出第一個自己的程式,人家說從無到有很難,從模仿中創新比較容易,所以XS的編輯器裡有內容大量的參考腳本,透過複製,貼上就可以有大量的腳本可以開始修改成自己的交易策略。

包括指標,選股,警示,函數,都有大量的內建腳本可以供參考,這些腳本都放在編輯器左欄”系統”這個目錄底下(如下圖)

腳本樣本區

並且根據腳本的屬性分門別類的放在不同的子目錄底下

腳本目錄

例如以目前最紅的當沖策略來說,在編輯器左欄上方點選”警示”這個頁籤,出現上圖最左邊的樹狀子目錄時,按下當沖交易型這個子目錄,就會出現像下圖這樣所有32個當沖交易的參考腳本都會列出來,看上那一個,快點兩下,腳本就會呈現在編輯區裡了

當沖腳本

接下來在編輯的選項裡選”全選” ,”複製”,”貼上”就可以把這個腳本貼到自己新增的腳本裡,然後就可以隨您修改了。

模仿是創新的開始,有現成的程式碼可以參考,千萬別客氣。

 

關於跳空的三個策略

初學程式交易時,寫不了浩然壯闊的大作,僅能用開,高,低,收,成交量這五個欄位,東拼西湊,期能有所收穫。彼時,光跳空相關的策略,就寫了不少,自己覺得效果不錯的,有三個,今天就來跟大家介紹這三個跟跳空有關的策略。

第一個策略叫跳空後的補空,概念如下

1.前一日跳空上漲2%以上

2.今天補空2%以上

3.100日均量超過500張

腳本如下:

if open[1]>close[2]*1.02
and open[1]=low[1]
//前一日跳空
then begin
if close*1.02<=open[1]
//補空2%
and average(volume,100)>500
then ret=1;
end;

 

第二個策略是加速趕底式的跳空

條件如下

1.前20個交易日下跌超過一成

2.前一日下跌

3.開盤跳空重挫5%

腳本

if close[1]<close[2]
and open*1.05<close[1]
and close[20]>close*1.1
then ret=1;

第三個策略是個股隨大盤跳空大跌

條件如下

1.前一日下跌

2.開盤跳空大跌超過5%

3.當天大盤也跳空下跌

腳本
if close[1]<close[2]
and open*1.05<close[1]
and GetSymbolField(“tse.tw”,”開盤價”)
<GetSymbolField(“tse.tw”,”收盤價”)[1]
then ret=1;

 

這三個跳空的腳本,寫起來都很短 ,介紹給大家。

開發彼此無相關的複合策略

書上市後,好像在辦人生交友回顧會,以前的老戰友看完書,考了我一題: 你覺得用技術面,籌碼面,還是基本面寫交易策略比較有用?? 是用1分鐘線有用?還是日線有用? 還是從頭到尾用週線就好?(老戰友是週線應用天王),我的腦海裡想起一首伍佰的歌:”台灣製造”,裡頭有一句歌詞叫作

“攏乎咱摻摻做伙”

摻摻作伙

沒錯,根據機率學,如果彼此沒什麼相關性的交易策略,都出現買進訊號,那麼這時候進場買進的勝率,應該要更高才對。

以昨天的雲端策略中心出的訊號為例

3317

昨天一開盤,多次到頂而破這個從技術面出發的策略,出了好幾個訊號,但只有尼克森也同時符合主力默默收集籌碼後攻堅這個籌碼面的交易策略,結果尼克森是所有昨天多次到頂而破跳出來的股票裡,走勢最強的。

再例如,我之前就有聽說過,有個老師最拿手的一招,就是挑出主力買超且BBand出現買進訊號的股票。

我單獨寫了一個bband的進場腳本

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;

用這腳本去跑過去一年的所有股票,回測報告如下,

112101

勝率是48.21%,如果我加上主力前一日買超大於800張這樣的籌碼面條件,腳本如下

condition1=false;
condition2=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 condition1=true;

value1=GetField("主力買賣超張數");
if value1[1]>800
and volume>=average(volume,20)*1.3
then condition2=true;
if condition1 and condition2 then ret=1;

這時同區間回測出來的交易次數只剩下11次,但其中8次賺錢,勝率超過72%

112102

這一年的數據來看,BBAND的買進訊號,如果考慮到前一晚主力有大買超,勝率會比較高。不過這個策略如果回測的時間拉長,其實勝率也就五成上下,應該是沒有市場傳的那麼神勇。這也是自己寫腳本自己回測的好處,任何聽到的策略,都可以實地測看看。

如果要說技術面與籌碼面整合的不錯的交易策略,小弟倒是可以提供一個,先來看腳本

//全部股票,出場設20天
input:period(20);
value1=GetField("分公司賣出家數")[1];
value2=GetField("分公司買進家數")[1]; 

if linearregslope(value1,period)>0
//賣出的家數愈來愈多
and linearregslope(value2,period)<0
//買進的家數愈來愈少
and
 close*1.05<close[period]
//但這段期間股價在跌
and 
close*1.03<close[1]
//今天又跌超過3%
and close*1.5<close[100]
and tselsindex(10,6)=1
then ret=1;

從這腳本就可以看出,我們是在尋找那種股價在近百日大跌五成但近十日主力卻逆向在收集籌碼的股票,把這個腳本去回測過去五年的所有股票,20天後出場,勝率超過六成,如果持有超過四十天,勝率更超過65%。

大跌後的主力收集回測報告

這個策略是在尋找那些股價大跌後,主力有沒有重新回補的股票,例如下面這張圖

112103

這個策略實際操作起來,是靠大賺來頂勝率沒有非常高的缺點,如果能輔以基本面的研究,過濾那些基本面有疑慮的股票,應該可以做的更好。

以上大致是我摻摻作伙的操作方式,大抵上就是把技術面跟籌碼面的策略一起考慮進來,濾出來的股票再從基本面去double check。

摻摻作伙,我覺得還行,盍興乎來!!

 

 

個股儀表板step by step

每個人總有不只一個的進場標準,如何讓多個標準協同作業? 大家都有不同的自由心證法,透過程式語法,我們可以把不同的進場標準在K線圖中標示出來,從圖上進場點的標示分佈及密度來作決策。

有些程式交易者,認為交易愈簡單愈好,所以找出一個進場的標準就夠了,剩下的交給交易紀律及資金管理即可,加上其他的濾網往往僅是為了回測的最佳化,甚至可能過度最佳化。

我個人的經驗則是,如果有幾個彼些不相關的進場標準,都同時或相繼出現交易訊號,其可信度是會提高的,最常舉的例子是當我們感冒的時候,可能發燒,喉嚨痛,流鼻涕,咳嗽,全身無力,冒冷汗,如果只是發燒,或只是咳嗽,那麼不一定是感冒,但如果上面的症狀都相繼發作,那麼感冒的機率就大增了。

 

基於這樣的思考,我在三週學會程式交易這本書的實戰篇裡,提出了一個”個股儀表板”的概念,透過自訂指標的程式撰寫,在個股的K線圖上,把不同的進場訊號標示出來,讓我們可以隨時檢視,那些股票相繼且密集的出現進場訊號。

 

我在書裡舉了以下的例子

{
指標說明
個股儀表板演化的交易策略
收錄於「三週學會程式交易:打造你的第一筆自動化交易」 330頁 https://www.ipci.com.tw/books_in.php?book_id=724 } condition1=false; condition2=false; condition3=false; condition4=false; condition5=false; condition6=false; condition7=false; condition8=false; condition9=false; condition10=false; switch(close) begin case >150: value5=low*0.9; case <50 : value5=low*0.98; default: value5=low*0.95; end; //==========日KD黃金交叉================ input: _TEXT1("===============","KD參數"); input: Length_D(9,"日KD期間"); variable:rsv_d(0),kk_d(0),dd_d(0),c5(0); stochastic(Length_D, 3, 3, rsv_d, kk_d, dd_d); c5=barslast(kk_d crosses over dd_d); if c5=0 and c5[1]>20 then condition1=true; if condition1 then plot1(value5,"月KD高檔鈍化且日KD黃金交叉"); //============內外盤量比差==================== variable:c3(0); value6=GetField("內盤量");//單位:元 value7=GetField("外盤量");//單位:元 if volume<>0 then begin value8=value7/volume*100;//外盤量比 value9=value6/volume*100;//內盤量比 end; value10=average(value8,5); value11=average(value9,5); value7=value10-value11+5; c3=barslast(value7 crosses over 0); if c3=0 and c3[1]>20 then condition2=true; if condition2 then plot2(value5*0.99,"內外盤量比差"); //===========淨力指標============== input: _TEXT2("===============","淨力指標參數"); input:period2(10,"長期參數"); variable:c4(0); value12=summation(high-close,period2);//上檔賣壓 value13=summation(close-open,period2); //多空實績 value14=summation(close-low,period2);//下檔支撐 value15=summation(open-close[1],period2);//隔夜力道 if close<>0 then value16=(value13+value14+value15-value12)/close*100; c4=barslast(value16 crosses over -4); if c4=0 and c4[1]>20 then condition3=true; if condition3 then plot3(value5*0.98,"淨力指標"); //===========多頭起漲前的籌碼收集================ variable:c2(0); value1=GetField("分公司買進家數"); value2=GetField("分公司賣出家數"); value3=value2-value1; value4=countif(value3>20,10); c2=barslast(value4>6); if c2=0 and c2[1]>20 then condition4=true; if condition4=true then plot4(value5*0.97,"籌碼收集"); //===========法人同步買超==================== variable: v1(0),v2(0),v3(0),c1(0); v1=GetField("外資買賣超"); v2=GetField("投信買賣超"); v3=GetField("自營商買賣超"); c1= barslast(maxlist2(v1,v2,v3)>100); if c1=0 and c1[1]>20 then condition5=true; if condition5=true then plot5(value5*0.96,"法人同步買超"); //========DIF-MACD 翻正============= input: _TEXT3("===============","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); variable:c6(0); c6=barslast(oscValue Crosses Above 0); if c6=0 and c6[1]>20 then condition6=true; if condition6 then plot6(value5*0.95,"DIF-MACD 翻正"); //========資金流向====================== variable: m1(0),ma1(0),c7(0); m1=GetField("資金流向"); ma1=average(m1,20)*1.5; c7=barslast(m1 crosses over ma1 and close>close[1]); if c7=0 and c7[1]>20 then condition7=true; if condition7 then plot7(value5*0.94,"資金流向"); //=========總成交次數================ variable: t1(0),mat1(0),c8(0); t1=GetField("總成交次數","D"); mat1=average(t1,20)*1.5; c8=barslast(t1 crosses over mat1 and close>close[1]); if c8=0 and c8[1]>20 then condition8=true; if condition8 then plot8(value5*0.93,"成交次數"); //=========強弱指標================== variable:s1(0),c9(0); s1=GetField("強弱指標","D"); c9=barslast(trueall(s1>0,3)); if c9=0 and c9[1]>20 then condition9=true; if condition9 then plot9(value5*0.92,"強弱指標"); //============開盤委買================ variable:b1(0),mab1(0),c10(0); b1=GetField("主力買張"); mab1=average(b1,10); c10=barslast(b1 crosses over mab1); if c10=0 and c10[1]>10 then condition10=true; if condition10 then plot10(value5*0.91,"主力買張");

用這個腳本畫出來的圖如下圖

個股儀表板

這個程式它的步驟有幾個

一,把每一個進場標準都視為一個condition,有多少個標準就設多少個,每一個condition的default值都是false。

二,依不同價位設置進場點的標示位置,

三,開始根據進場標準,在condition從false變成true時把進場標示標在當根K棒的底下,用Barslast來過濾同一個訊號必須是20天來第一次出現的

 

根據這些步驟,舉一個更容易理解的例子,如果把移動平均線黃金交叉,動能指標突破零,9K突破9D,以及6日RSI突破12日RSI,DIF-MACD轉正視為五個不同的進場標準,那麼包含這四個進場標準的個股儀表板就可以像下面這個腳本的寫法

//把每一個進場標準都視為一個condition,
//有多少個標準就設多少個,
//每一個condition的default值都是false。
condition1=false;
condition2=false;
condition3=false;
condition4=false;
condition5=false;
//依不同價位設置進場點的標示位置
switch(close)
begin
 case >150: value5=low*0.9;
 case <50 : value5=low*0.98;
 default: value5=low*0.95;
end;
//開始根據進場標準,
//在condition從false變成true時
//把進場標示標在當根K棒的底下。
//用Barslast來過濾同一個訊號必須是20天來第一次出現的

//==========日KD黃金交叉================
input: _TEXT1("===============","KD參數");
input: Length_D(9,"日KD期間");

variable:rsv_d(0),kk_d(0),dd_d(0),c1(0);

stochastic(Length_D, 3, 3, rsv_d, kk_d, dd_d);
c1=barslast(kk_d crosses over dd_d);
if c1=0 and c1[1]>20 then 
 condition1=true;
if condition1 then
 plot1(value5,"月KD高檔鈍化且日KD黃金交叉");

//========DIF-MACD 翻正=============
input: _TEXT3("===============","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);
variable:c2(0);
c2=barslast(oscValue Crosses Above 0);
if c2=0 and c2[1]>20 then
 condition2=true;
if condition2 then
 plot2(value5*0.99,"DIF-MACD 翻正");

//========移動平均線黃金交叉======================
variable: c3(0);
c3=barslast(average(close,5)cross over average(close,20));
if c3=0 and c3[1]>20 then
 condition3=true;
if condition3 then
 plot3(value5*0.98,"移動平均線黃金交叉");
 
//=========RSI黃金交叉================
variable: c4(0);

c4=barslast(RSI(close,6) crosses over rsi(close,12));
if c4=0 and c4[1]>20 then
 condition4=true;
if condition4 then 
 plot4(value5*0.97,"RSI黃金交叉");
 
//=========動能指標==================
variable:c5(0);
c5=barslast( momentum(close,10) crosses over 0);
if c5=0 and c5[1]>20 then
 condition5=true;
if condition5 then
 plot5(value5*0.96,"動能指標");

這樣的腳本可以畫出下面這樣的圖

121

透過這樣的視覺化作法,就可以把您私房的進場標準,一一標示在K線圖上,這樣就隨時可以檢視自選股符合那些您自設的進場標準了。

 

試著用程式來描述型態之一 見底強勢回昇

老市場看圖看久了,累積了不少江湖智慧,給他一張圖,他能說出很多故事,但每天一檔一檔股票地找有故事的圖,挺累人,接下來這系列,我試著把一些老市場教過我的看圖技巧,轉換成交易語法,讓電腦來幫我們找出符合描述條件的圖。

首先,先跟大家介紹的是下面的這個抄底型態

 

見底型態一

這張圖歸納起來,描述的概念有以下幾點

1.股價一再破底,低點愈來愈低。

2.跌到最低點後出現急拉,且高點突破上一波低點,並且漲幅超過前一波反彈高點的一半

3.拉回跌破前一波低點後立即以長紅棒再次突破前一波低點,此時是進場訊號

4.股價如果持續上漲且突破前一波高點,即為確認訊號

根據上述的條件,我寫的腳本如下

input:period(25);
var:h1(0),h2(0),low1(0),low2(0),low3(0),hb1(0),hb2(0),lowb1(0)
,lowb2(0),lowb3(0);
low1=lowest(close,period);//最低點
h1=highest(close,period);//最高點
lowb1=lowestbar(close,period);//最低點所在的bar
hb1=highestbar(close,period);//最高點所在的bar
low2=swinglow(close,period,3,3,2);//第二低點
lowb2=swinglowbar(close,period,3,3,2);//第二低點所在的bar
low3=swinglow(close,period,3,3,3);//第三低點
lowb3=swinglowbar(close,period,3,3,3);//第三低點所在的bar
h2=swinghigh(close,period,3,3,2);//第二高點
hb2=swinghighbar(close,period,3,3,2);//第二高點所在的位置
value1=h1-low1;//計算最後一波下跌的長度
value2=h2-low1;//計算第一波回昇的長度
if lowb2=nthmaxlist(1,hb1,hb2,lowb1,lowb2,lowb3)
and hb1=nthmaxlist(2,hb1,hb2,lowb1,lowb2,lowb3)
and lowb1=nthmaxlist(3,hb1,hb2,lowb1,lowb2,lowb3)
and hb2=nthmaxlist(4,hb1,hb2,lowb1,lowb2,lowb3)
//設定各高低點的相對位置
and close[60]>value1*1.2
//波段大跌2成以上
and value2>value1*0.5
//回昇第一波要大於左頂到最低點的一半
and h2>low2
//回昇第一波的高點要大於左底
and close cross over low2
then ret=1;

寫出來的腳本,可以出像下面這樣的股票

樣圖

拿這個腳本去回測過去七年所有的股票,出場點設為進場後20天,結果一共出現了80次的交易訊號,但其中不到四成會賺錢,顯示這不是常出訊號的型態,也不是一個放諸四海皆準的策略,但如果拿高股利或高ROE的股票去回測,七年倒是出現七次交易訊號,其中有五次可以獲利出場。

這種抄底型的策略還是比較合適用在績優股,但只有七個樣本,顯然我的條件設的太嚴了一點,大家或許用這個腳本再去調整成對您更有意義的腳本

 

 

 

 

葛拉罕留下來的投資智慧

昨天看到這篇文章

https://www.hkcompanysearch.com/post/35406920/

看到巴菲特的老師,82歲的葛拉罕接受媒體訪問的中譯文

在訪談中,葛拉罕提出了兩條挑股票的標準

1.總市值低於過去一年獲利的七倍

2.一個公司擁有的應該兩倍於它所欠下的。

我試著寫了一個選股腳本,在台股裡,挑符合這兩個腳本的股票

我寫的腳本如下

value1=GetField("本期稅後淨利","Q")+GetField("本期稅後淨利","Q")[1]
+GetField("本期稅後淨利","Q")[2]+GetField("本期稅後淨利","Q")[3];
//單位:百萬
value2=GetField("負債總額","Q");
value3=GetField("資產總額","Q");
value4=GetField("總市值","D");//單位:億

if value4<value1*7/100
and value3>value2*2
then ret=1;
outputfield(1,value1/100,0,"近四季獲利(億)");
outputfield(2,value1/100*7,0,"獲利的七倍(億)");
outputfield(3,value4,0,"總市值");
outputfield(4,value2,0,"負債");
outputfield(5,value3,0,"資產");

挑出來的股票如下表

100201