『3週學會程式交易』範例的問題

  •   1.3K 
  • 最後發表   tdf  2017 十二月 29
tdf 發文於   2017/12/15

在書中第130頁的範例--不同年增率給不同本益比

實驗看看

選股結果如圖

序號1-14都是本益比超過20倍

其中不乏營收是衰退者

請問為啥會跑出來?

程式碼如下

 

input:discountrate(20);

var:truevalue(0);

value1 = GetField("累計營收年增率","M");

value2 = GetField("本益比","D");

 

//推估的全年EPS

value3 = GetField("每股營業利益(元)","Q") + GetField("每股營業利益(元)","Q")[1]

 + GetField("每股營業利益(元)","Q")[2] + GetField("每股營業利益(元)","Q")[3];

 

if value3 > 0 

then begin

 

  switch(value1)//視累計營收年增率的高低給予不同本益比

  begin

  

    case > 15: truevalue = value3 * 20;//成長率超過15%給20倍本益比

case <= 0: truevalue = value3 * 10;//衰退只給10倍本益比

default: truevalue = value3 * 15;//一般就給15倍本益比

 

  end;

  

if close * ( 1 + truevalue / 100 ) < truevalue

then ret = 1;

 

end;

 

//----- 註解 ----- 

SetOutputName1("累計營收年增率");

OutputField1(value1);

 

SetOutputName2("本益比");

OutputField2(value2);

排序方式: 標準 | 最新
XQ小幫手 發文於   2017/12/15

你好:

   你所述之範例有以下幾點問題:

1.程式碼與書中略有不同:

(1)書上範例並沒有  value2 = GetField("本益比","D");

(2)判斷式部分正確程式碼應為 if close * ( 1 + discountrate / 100 ) < truevalue then ret = 1;

 

2.這邊程式碼的概念是用每股營業利益(元),取當期+前三期的值,推估今年的EPS,也就是value3,並給予value3不同的倍數

但你所用的value2 = GetField("本益比","D"); 是目前實際上的本益比

兩者取出來的數值本來就會有所差異喔,可見下圖。

本益比

 

以上幾點說明,如有問題可以再做詢問。

tdf 發文於   2017/12/16

修正後就對了

這題如果能減掉業外獲利的條件會更精確

請教小幫手可以加入嗎?

 

XQ小幫手 發文於   2017/12/18

你好:

  這部份書上僅是提供範例,你這邊可以依照需求另外修改編譯即可。業外可參考說明函數網頁:業外的搜尋

tdf 發文於   2017/12/28

把業外的部份(value6)加進去後

選股變成選沒半檔

怪的是

若沒有把這段程式碼蓋掉

也是選沒半檔

 

//業外EPS

{Value2 = GetField("營業外收入合計") * 0.01;

value5 = GetField("最新股本");

value6 = value2 / value5;}

但蓋住的這些Value  在下面都沒有用到啊

 

完整程式碼如下--

 

input:discountrate(22);

var:truevalue(0);

value1 = GetField("累計營收年增率","M"); 

 

//業外EPS

{Value2 = GetField("營業外收入合計") * 0.01;

 

value5 = GetField("最新股本");

 

value6 = value2 / value5;}

 

//推估的全年EPS

value3 = ( GetField("每股營業利益(元)","Q") + GetField("每股營業利益(元)","Q")[1]

 + GetField("每股營業利益(元)","Q")[2] + GetField("每股營業利益(元)","Q")[3] ) {- value6};

 

value4 = close / value3;//推估近4季本益比

 

if value3 > 0 

then begin

 

  switch(value1)//視累計營收年增率的高低給予不同本益比

  begin

  

    case > 15: truevalue = value3 * 22;//成長率超過15%給20倍本益比

case <= 0: truevalue = value3 * 12;//衰退只給10倍本益比

default: truevalue = value3 * 17;//一般就給15倍本益比

 

  end;

   

if close * ( 1 + discountrate / 100 ) < truevalue 

then ret = 1;

 

end;

 

//----- 註解 ----- 

SetOutputName1("累計營收年增率");

OutputField1(value1);

 

SetOutputName2("推估本益比");

OutputField2(value4);

XQ小幫手 發文於   2017/12/29

你好:

      小編猜想你的執行頻率是日,所以會無相關股票,你的執行條件要改為"季"喔,以上說明。

發表回覆
Close