每年六月到九月是除權息的旺季,對於投資人來說要思考到底要不要參加除權息,還是賣出股票先把資本利得收進口袋了,如果我們選擇要參加除權息,最希望的還是能夠填權息,否則等於沒有獲利,那我們也常常聽到某某個股在除權息後快速填息了,如果能找到除權息後快速填權息且機率非常高的股票似乎也能夠發展出套利策略,例如說除權息前先賣出持股,除權息後再買進賺填權息的價差似乎也是不錯。
根據這個想法我們可以寫個選股腳本來選出過去歷史個股的除權息中,它們除權息後能夠快速填權息的個股。
input: startDate(20110101, "起始日期");
input: daysOfFillExDividendRight(30, "幾天內填息");
input: achieveCountsRate(70, "勝率%");
input: exDividendRightCounts(5, "除權息次數");
setFirstBarDate(startDate);
// 今天是除權息後幾天
var: intraBarPersist howManyDaysUntilExDividendRight(0);
// 除權息前的收盤價
var: intraBarPersist beforeExDividendRightPrice(0);
// 計數過去達成快速填權息的次數
var: intraBarPersist countAchieveCounts(0);
// 過去共除權息幾次
var: intraBarPersist exDividendRight(0);
// 判斷能否計算過去達成快速填權息的次數的旗標
var: intraBarPersist canCount(true);
if date = GetField("除權息日期") then begin
// 當遇到除權息重新計算今天是除權息後幾天為0
howManyDaysUntilExDividendRight = 0;
beforeExDividendRightPrice = closeD(1);
// 計數除權息次數
exDividendRight += 1;
canCount = true;
end;
condition1 = date >= GetField("除權息日期");
if condition1 then begin
howManyDaysUntilExDividendRight += 1;
// 當填權息及今天距離除權息為快速填權息
// 計數過去達成快速填權息的次數 +1
condition2 = close cross Over beforeExDividendRightPrice and howManyDaysUntilExDividendRight < daysOfFillExDividendRight;
if condition2 and canCount then begin
canCount = false;
countAchieveCounts += 1;
end;
end;
// 計算快速填權息機率
value1 = (countAchieveCounts / exDividendRight) * 100;
condition11 = value1 >= achieveCountsRate;
condition12 = exDividendRight > exDividendRightCounts;
if exDividendRight <> 0 and condition11 and condition12 then begin
ret = 1;
outputField1(countAchieveCounts, "達成次數");
outputField2(exDividendRight, "除權息次數");
outputField3(value1, "快速填權息機率");
end;
再來我們將這個本拿來選股,我從2011年開始起算到今天(2023/7/2),以30天內填權息算是快速填權息,挑出快速填權息率80%以上從2011年到現在除權息10次以上的股票選出這20檔。
讀者可以拿這個選股腳本來試試看不同的參數或是組合,例如排除KY、加入ETF之類的,然後更進一步發展自己的交易策略。