小幫手您好:
已參考過此篇文章及發問區的其他文章
那些股票外資買超的隔天上漲的機會比較大??By 發財橘子 | 2017-05-09
目的想統計過去N年內每次除息當日開高的次數和機率(開盤價(還原)大於上一個營業日的收盤價)
例:今日9/11,統計過去1年內台積電2330開高3次佔總除息次數4次的機率=0.75
能力太差不知到哪裡寫錯.回測執行時好像開高次數都算錯.懇請指點。感激不盡~
小幫手您好:
已參考過此篇文章及發問區的其他文章
那些股票外資買超的隔天上漲的機會比較大??By 發財橘子 | 2017-05-09
目的想統計過去N年內每次除息當日開高的次數和機率(開盤價(還原)大於上一個營業日的收盤價)
例:今日9/11,統計過去1年內台積電2330開高3次佔總除息次數4次的機率=0.75
能力太差不知到哪裡寫錯.回測執行時好像開高次數都算錯.懇請指點。感激不盡~
Hello, 老漢.
根據您提供的腳本,小幫手發現一個問題,
主要台積電2019從年配息改成半年配季配,
此外,您的C2~C6計算應放入condition1 內計算,
input:cashY(5,"N年配息次數");
var:c1(0),c2(0),c3(0),c4(0),c5(0),c6(0),pr1(0),pr2(0),pr3(0),pr4(0),pr5(0), c99(0);
settotalBar(1250);
c1 = 0;
for value1=0 to cashY-1 begin
if GetField("現金股利","Y")[value1] > 0 then c1+=1; //count1 就是配息次數
condition1 = date = GetField("除權息日期"); //判斷當日是否是除權息當日
if condition1
then begin
value2 = getfield("Close", "D")[1]; //紀錄除權息前一日的close
c99 += 1; // Count99 計算除權息次數
if open>value2
then c2=c2+1; //開高的次數
if close>open
then c3=c3+1;//上漲的次數
if open>value2 and close>open
then c4=c4+1;//開高走高的次數
if close<open
then c5=c5+1;//下跌的次數
if open>value2 and close<open
then c6=c6+1;//開高走低的次數
end;
end;
pr1=c2/c99; //開高的機率
pr2=c3/c99; //上漲的機率
pr3=c4/c99; //開高走高的機率
pr4=c5/c99; //下跌的機率
pr5=c6/c99;//開高走低的機率
if c99 >0 then ret=1;
outputfield(1,c99,0,"除權息次數");
outputfield(2,c2,0,"開高次");
outputfield(3,pr1,2,"開高率");
outputfield(4,pr2,2,"上漲率");
outputfield(5,pr3,2,"高漲率");
outputfield(6,pr4,2,"下跌率");
outputfield(7,pr5,2,"高跌率");

此外建議您也要一併檢查資料的日期來判斷是否為近五年的資料。
由於選股會取用最近期的資料,所以若商品近幾年沒配息的話,取到的就是最後一次配息的資料,但那可能是N年前的資料。
謝謝。
感謝回覆,但是過去5年台積電也沒有除息90次.應該也頂多只有20次而已. 而開高的次數也頂多只有20次,請教我該如何修改呢?或去哪裡找答案?
Hello, 老漢.
小幫手這邊發現上次幫您修改的腳本有誤,
for value1=0 to cashY-1 begin
這邊不需要跑五次,因為設定長度已經包含五年了,
input:cashY(5,"N年配息次數");
var:c1(0),c2(0),c3(0),c4(0),c5(0),c6(0),pr1(0),pr2(0),pr3(0),pr4(0),pr5(0), c99(0);
settotalBar(cashY*250);
condition1 = date = GetField("除權息日期"); //判斷當日是否是除權息當日
if condition1
then begin
value2 = getfield("Close", "D")[1]; //紀錄除權息前一日的close
c99 += 1; // Count99 計算除權息次數
Print("2330除權息日期",NumToStr(GetField("除權息日期"), 0));
if open>value2
then
c2=c2+1; //開高的次數
if close>open
then
c3=c3+1;//上漲的次數
if open>value2
and close>open
then
c4=c4+1;//開高走高的次數
if close<open
then
c5=c5+1;//下跌的次數
if open>value2
and close<open
then
c6=c6+1;//開高走低的次數
end;
pr1=c2/c99; //開高的機率
pr2=c3/c99; //上漲的機率
pr3=c4/c99; //開高走高的機率
pr4=c5/c99; //下跌的機率
pr5=c6/c99;//開高走低的機率
if c99 >0 then ret=1;
outputfield(1,c99,0,"除權息次數");
outputfield(2,c2,0,"開高次");
outputfield(3,pr1,2,"開高率");
outputfield(4,pr2,2,"上漲率");
outputfield(5,pr3,2,"高漲率");
outputfield(6,pr4,2,"下跌率");
outputfield(7,pr5,2,"高跌率");
所以得到的 2330 除權息日期 如下
除權息日期 20190624
除權息日期 20190919
除權息日期 20191219
除權息日期 20200319
除權息日期 20200618
除權息日期 20200917
除權息日期 20201217
除權息日期 20210317
除權息日期 20210617
除權息日期 20210916
除權息日期 20211216
除權息日期 20220316
除權息日期 20220616
除權息日期 20220915
除權息日期 20221215
除權息日期 20230316
除權息日期 20230615
除權息日期 20230914
因迴圈跑了5次,故之前次數誤算成90次。
謝謝。
非常感謝小幫手的幫忙! 感激不盡~
4 評論