為何跑不出任何股票?

  •   271 
  • 最後發表   大師  2019 十二月 11
大師 發文於   2019/11/25

寫了一個以下的選股腳本,頻率:季,為怕跑不出股票,篩選條件刻意設為數值不等於0,但是依然跑不出任何股票,煩請協助看看問題出在哪裡?

------------------------------------------------------------

var: MTA(0),NIMTA(0), NIMTAAVG(0), TLMTA(0), CASHMTA(0), EXRET(0), EXRETAVG(0), SIGMA(0), RSIZE(0), MB(0), PRICE(0), LPFD(0), PFD(0), stockreturn(0), TSEreturn(0);

value1=GetField("稅前息前淨利","Q");

value2=GetSymbolField("TSE.TW","收盤價","Q");

value3=GetField("收盤價","Q");

value4=GetField("收盤價","D");

 

TSEreturn = (value2-value2[1])/value2[1];

stockreturn= (value3-value3[1])/value3[1];

 

MTA=GetField("總市值(億)","Q")*100+GetField("負債總額","Q");

NIMTA = GetField("稅前息前淨利","Q") / MTA;

NIMTAAVG = 0.5333*NIMTA+0.2666*NIMTA[1]+0.1333*NIMTA[2]+0.0666*NIMTA[3];

EXRET = (log(1+stockreturn)-log(1+TSEreturn)) / 2;

EXRETAVG = 0.5333*EXRET+0.2666*EXRET[1]+0.1333*EXRET[2]+0.0666*EXRET[3];

RSIZE = log(GetField("總市值","Q")/GetSymbolField("TSE.TW","總市值","Q"));

TLMTA = GetField("負債總額","Q") / MTA;

CASHMTA = GetField("現金及約當現金","Q") / MTA;

SIGMA = StandardDev(value4,60,2);

MB = MTA / (GetField("資產總額","Q")+0.1*(GetField("總市值(億)","Q")*100-GetField("資產總額","Q")));

//PRICE = log(value4);

if value4 >15 then PRICE = log(15)

else PRICE = log(value4) ;

 

 

LPFD = -20.26*NIMTAAVG + 1.42*TLMTA - 7.13*EXRETAVG + 1.41*SIGMA - 0.045*RSIZE - 2.13*CASHMTA + 0.075*MB - 0.058*PRICE - 9.16;

 

PFD = 1/(1+ExpValue(-LPFD));

 

 

if PFD<>0

then ret=1;

 

setoutputname1("PFD");

outputfield1(PFD);

 

排序方式: 標準 | 最新
大師 發文於   2019/11/26

小幫手有看到嗎?

附加文件

XQ小幫手 發文於   2019/11/26

Hi 大師

您好,請您將您的選股中心的選股策略匯出檔(*.DSTX)

以及您選股中心的完整圖片

提供給小幫手,以利小幫手確認問題,謝謝。

 

大師 發文於   2019/11/26

已用上傳附件的方式上傳了,再麻煩小幫手看一下了

附加文件

XQ小幫手 發文於   2019/11/27

Hi  大師

這邊解析出您的程式碼後,發現是程式碼中間的

TSEreturn = (value2-value2[1])/value2[1];
stockreturn= (value3-value3[1])/value3[1];

因為您所取得的資料是季資料,也就是GetSymbolField("TSE.TW","收盤價","Q") 等資料

您使用了value2跟value3去儲存這個資料。

假設11/27的value2=2 ,那11/26的value2也會等於2

因此就會出現TSEreturn與stockreturn 計算結果為0的現象,後續就執行不出結果了。

 

修改方式是請您直接使用

TSEreturn = (GetSymbolField("TSE.TW","收盤價","Q")-GetSymbolField("TSE.TW","收盤價","Q")[1])/GetSymbolField("TSE.TW","收盤價","Q")[1];
stockreturn= (GetField("收盤價","Q")-GetField("收盤價","Q")[1])/GetField("收盤價","Q")[1];

就能改善此狀況,以下是小幫手修正之後的結果圖片與檔案,請您參考,謝謝。

附加文件

  • 按讚來自於
  • yuang19780121
大師 發文於   2019/11/27

這裡還有2個問題:
1.“假設11/27的value2=2 ,那11/26的value2也會等於2”
     -->小幫手的這個意思是好像是用“日”的頻率去跑才會有這個現象,還是用“季”去跑一樣會這樣?
2.蠻奇怪的,我照小幫手的方式修改,不管用“季”還是用"日"去跑還是都沒有跑出股票,小幫手卻跑得出來,不知問題出在哪裡?

附加文件

大師 發文於   2019/12/05

不知小幫手有看到我11/27的問題嗎?

XQ小幫手 發文於   2019/12/06

Hi 大師

經確認,請您將此段語法的這一段改成

RSIZE = log(GetField("總市值(元)","Q")/GetSymbolField("TSE.TW","總市值(元)","Q"));

小幫手測試後,即可跑出結果

請參考以下網址,謝謝。

 

大師 發文於   2019/12/09

 已經可以跑出股票了...謝謝小幫手....

另外,有關語法的部份再請教一下,先前小幫手有提到下面這些文字

--------------------------------------------------------------------------------------------------------------------------------------------

這邊解析出您的程式碼後,發現是程式碼中間的

TSEreturn = (value2-value2[1])/value2[1];
stockreturn= (value3-value3[1])/value3[1];

因為您所取得的資料是季資料,也就是GetSymbolField("TSE.TW","收盤價","Q") 等資料

您使用了value2跟value3去儲存這個資料。

假設11/27的value2=2 ,那11/26的value2也會等於2

 

因此就會出現TSEreturn與stockreturn 計算結果為0的現象,後續就執行不出結果了
-----------------------------------------------------------------------------------------

想請教小幫手的是
-->小幫手的意思是用“日”的頻率去跑才會有這個現象,還是用"季"去跑一樣會有這個現象?

XQ小幫手 發文於   2019/12/11

Hi i 大師

您好,是小幫手一開始的理解錯誤,

其實如果是跑"季"資料是不會有這種現象的。

您的理解沒錯,謝謝您的詢問。

發表回覆
Close