如何快速定義及應用K線型態來寫腳本?

By | 2020-02-04

這兩天盤的波動較大,非經濟因素帶來的衝擊,對一些長期趨勢型的分析工具可能比較容易失真,透過1到數根K棒的型態分析,再搭配籌碼及基本面因素的選股方式,變成短期因應之道,但坊間的選股工具,一般都是K線型態歸一類,籌碼與基本面分析的歸另一類,較少組合起來選股的工具,於是有XS的User反映能否把K線型態內建成函數,以利於跟其他選股條件組合使用,今天就來回應這個需求

首先,我寫了一個樣本函數如下:

bKpatterm型態函數

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="多頭遭遇";

有了這個函數,我就可以把型態跟其他選股條件組合在一起,成為一個新的選股策略。

舉個例子,K線型態上有個叫多頭母子的型態,其樣式如下圖

我寫了一個選股策略如下

這當中除了本益比小於12及近一日三大法人合計買超這兩個條件是系統內建的之外,另外加了一個腳本型的選股條件: 低本益比股大跌後出現多頭母子,我寫的腳本如下:

if bkpatterm="多頭母子"
and close*1.4<close[90]
and close*1.2<close[30]
then ret=1;

這個腳本是去尋找過去九十天跌了四成,過去三十天跌了兩成的股票,然後它的K線型態符合多頭母子。

如果拿這腳本跟上述條件組合而成的策略去選股,回測過去兩年,出場點設為20天之後,回測報告如下

過去兩年共出現八次抄底的機會,每次都能獲利出場,我把回測的時間接長到五年及十年,勝率也都有六成以上,平均報酬率也都還可以。

以上是bkpatterm這個函數的介紹及應用,這個函數目前包括的K線型態還不夠多,我會找時間把各種型態如W底,M頭等等的都補齊,未來大家直接引用即可。