Hi 小幫手你好
以下是我的測試腳本 共計有三個
1.現金股利分配率連續3年都在30%~80%之間 (年頻率)
settotalbar(1);
input:N(3,"近N年"),X(30,"最低分配率"),Y(80,"最高分配率");
value1=GetField("現金股利","Y");
value2=GetField("現金股利","Y")[1];
value3=GetField("現金股利","Y")[2];
value4=GetField("每股稅後淨利(元)","Y");
value5=GetField("每股稅後淨利(元)","Y")[1];
value6=GetField("每股稅後淨利(元)","Y")[2];
//print("vic div",date,value1,value2,value3,value4,value5,value6);
condition1=trueall(GetField("每股稅後淨利(元)","Y") > 0,N);
if condition1 then
begin
condition2=trueall(GetField("現金股利","Y")>0,N);
if condition2 then
begin
condition3=trueall(GetField("現金股利","Y")/GetField("每股稅後淨利(元)","Y") *100 >=X,N);
condition4=trueall(GetField("現金股利","Y")/GetField("每股稅後淨利(元)","Y") *100 <=Y,N);
if condition3 and condition4 then ret=1;
end;
end;
2.連續3年現金殖利率在2.5%與8%之間 (日頻率)
settotalbar(1);
input:N(3,"年數"),X(2.5,"最低殖利率"),Y(8,"最高殖利率");
vars:period(244),i(0);
array:div[20](0),cond[20](True);
condition1=True;
for i= 0 to N -1
begin
div[i]=average(GetField("現金股利殖利率","D")[244 *i],244);
cond[i] = (div[i] >=X) and (div[i] <=Y);
condition1 = condition1 and cond[i];
end;
if condition1 then ret=1;
3.連續3年EPS年成長率在5%與30%之間 (年頻率)
input:N(3,"年數"),X(5,"最低成長率"),Y(30,"最高成長率"); vars:i(0); array:eps[20](0),eps_per[20](0),cond[20](True); settotalbar(1); condition1=False; condition2=False; if (trueall(GetField("每股稅後淨利(元)","Y")>0,N+1)) then begin condition1=True; condition2=True; for i= 0 to N -1 begin eps[i]=GetField("每股稅後淨利(元)","Y")[i]; value1= GetField("每股稅後淨利(元)","Y")[i+1]; eps_per[i]=(eps[i]/value1 -1)*100; condition1=condition1 and (eps[i] >0); cond[i] = (eps_per[i] >=X) and (eps_per[i] <=Y); condition2 = condition2 and cond[i]; end; end;
以這三個條件去跑2007/1/1~2020/7/20 的每日回測 結果有將近1100個失敗
但是如果日期改成2012/1/1~2020/7/20之間, 又都幾乎成功
我把回測報告附在附件中
再麻煩你幫我看是哪個環節出問題
感謝
結果
1 評論