回測結果 失敗例子過多,但是更改測試區間就幾乎全部成功

  •   79 
  • 最後發表   我是新手請多指教  2020 七月 30
我是新手請多指教 發文於   2020/07/29

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之間, 又都幾乎成功

我把回測報告附在附件中
再麻煩你幫我看是哪個環節出問題
感謝
結果

附加文件

XQ小幫手 發文於   2020/07/30

我是新手請多指教 大 您好

Q:為何回測結果會產生大量的錯誤?

A:主要原因是我們回測系統設有當計算過長的時間限制,

以防過於耗費效能使得CPU承受不住讓電腦OR程式當機。

因為您的選股策略滿多程序的,所以小幫手建議您分批次篩選股票(電子股、生技股.....)

以及盡量少使用迴圈,

XS本身就是個時間序列構成的程式,

用迴圈有點疊床架屋的概念,

這會消耗大量不必要的效能。

謝謝您

 

發表回覆
Close