回朔日期不同 沒有設選股條件 出現的數目大不同?

  •   45 
  • 最後發表   mina2310  6 天前
mina2310 發文於   2025/09/30

我在學寫選股  我沒有設定任何條件  直接ret=1;

可是我不明白為什麼  一樣的程式碼     一樣都是選取的範圍都是普通股全部

只是因為日期的不同  選股按下去  會有不一樣符合條件的個股?一下全部都有  一下只有一檔出現?

程式碼如下

////eps

value3=month(getFieldDate("月營收", "M"))-month(getFieldDate("每股稅後淨利(元)", "Q"))+1;   //8-6=3

 

value88=getField("每股稅後淨利(元)", "Q");

var:i(0);

value30=0;

for i= 0 to 42

begin

value30=floor(i/3);    //0 0 //1 0  //2  0   //3  1 

array:mclosearr[42](0);    /////月收盤價

mclosearr[i]=CloseM(i+value3);   ///0

array:myarr[14](0);                      //季/eps

myarr[value30]=getField("每股稅後淨利(元)", "Q")[value30]+getField("每股稅後淨利(元)", "Q")[value30+1]+getField("每股稅後淨利(元)", "Q")[value30+2]+getField("每股稅後淨利(元)", "Q")[value30+3];

Array:PEarr[42](0); 

pearr[i]=mclosearr[i]/myarr[value30];   //0  1

end;

 

 

value10=highestarray(PEarr,42);      //瘋狂本益比

valuE20=lowestArray(peARR,42);   //特價本益比

value30=(value10-value20)/5;

 

value40=value20+value30;     //便宜本益比

value50=value20+value30*2;    //合理下緣本益比

value60=value20+value30*3;   //合理上緣本益比

value70=value20+value30*4;     //昂貴本益比

value80=average(getField("本益比", "D"),60);      ////rolling本益比

 

 

 

///////////////////預估Eps///////////////////////////////////

 

VALUE100=GETField("累計營收年增率", "M");// 最新累計營收年增率

VALUE101=CURRENTDate;

VALUE102=GETField("累計營收", "M");

VAR:DD(0),MM(0);

DD=DAYOFMonth(VALUE101);

MM=MONTH(VALUE101);

IF DD>10 THEN VALUE110=MM-1;

IF DD<10 THEN VALUE110=MM-2;

VALUE105=GETField("累計營收", "M")[VALUE110];   //去年全年營收 億元

VALUE120=VALUE105*(1+VALUE100/100);   //今年營收預估值

VALUE121=GETFIeld("稅後淨利率", "Q");

VALUE128=GETFIeld("稅後淨利率", "Q")+gETFIeld("稅後淨利率", "Q")[1]+gETFIeld("稅後淨利率", "Q")[2]+gETFIeld("稅後淨利率", "Q")[3];

value129=value128/4;

VALUE122=VALUE120*VALUE129/100;    //今年估淨利  億元

VALUE133=GETField("發行張數(張)", "D");

value134=VALUE122*100000000/(VALUE133*1000)*0.9;  //保守估今年eps

VALUE135= VALUE122*100000000/(VALUE133*1000);   //估今年EPS

value136=rates(0,4);

value137=1-value136;

 

VALUE200=value20*VALUE135;    //特價

VALUE201=value40*VALUE135;    //便宜

VALUE202=value50*VALUE135;    //合理下緣

VALUE203=value60*VALUE135;   //合理上緣

VALUE204=value70*VALUE135;     //昂貴

VALUE205=VALUE10*VALUE135;      //瘋狂

value207=value80*VALUE135;

 

 

outputfield1(value200,"特價");

outputfield2(value201,"便宜價");

outputfield3(value202,"合理下緣");

outputfield4(value203,"合理上緣");

outputfield5(value204,"昂貴");

outputfield6(value205,"瘋狂");

outputfield7(value207,"rolling價");

outputfield8(value134,"保守估今年eps");

outputfield9(value88,"當下eps");

outputfield10(value100,"今年累積成長率");

 

 

ret=1;

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/09/30

你是否先把前面一大堆程式碼刪除,只留一行ret=1;看看?也許前面的程式碼會干擾選股。

mina2310 發文於   2025/09/30

ret=1;都可以   可是我就是希望把運用上面程式把每檔股票的估值算出來 沒有前面的  ret=1;就沒有意義了; 很神奇的是  只有這個會這樣  其他寫個選股程式都沒有出現這個問題   不知道是因為哪個程式碼干擾了呢?

 

虎科大許教授 發文於   2025/10/01

可能有的欄位沒資料造成。16.04版本之後,可以在getField加入參數Default,並設定它為0,例如,getField("稅後淨利率", "Q", Default:=0)

mina2310 發文於   2025/10/03

我把所有有getfield 的後面都加上了 Default:=0  可是還是一樣 還是不明白程式中有哪裡出錯了

虎科大許教授 發文於   2025/10/04

 

你的程式有一個未知的關鍵字rates。刪除下列兩行程式碼應該就可以了。

value136=rates(0,4);

value137=1-value136;

XS小編 發文於   2025/10/08

Hello mina2310,

 

小編補充,選股策略顯示的商品可以切換到執行錯誤的商品,這邊可以確認錯誤的原因 (參考附圖)。

像除以0這種可以透過檢查分母是否為0來排除。

附加文件

mina2310 發文於   2025/10/10

我找到原因了

原來是因為在計算一開始的value3時  在遇到年分不同的時候 計算出來的差值  出現了負值

修改成這樣就可以用了   

 

////eps 

if year(getFieldDate("月營收", "M"))-year(getFieldDate("每股稅後淨利(元)", "Q"))=0 then

value3=month(getFieldDate("月營收", "M"))-month(getFieldDate("每股稅後淨利(元)", "Q"))+1   //3-12=-9

else

value3=month(getFieldDate("月營收", "M"))+12-month(getFieldDate("每股稅後淨利(元)", "Q"))+1;

 

太感謝@虎科大許教授 和@xs小編

 

發表回覆
Close