跨頻率遇到問題

  •   119 
  • 最後發表   菜酒  2022 九月 13
菜酒 發文於   2022/09/04

小幫手您好:

我想透過計算四期EPS年增率的回歸線選股,以下是我的程式碼:

setbarBack(9,"Q");

value1=rateOfChange(Getfield("EPS","Q"),4);

if linearregslope(value1,4) > 0
then ret = 1;

outputField(1,linearregslope(value1,4),2,"EPS年增率四期回歸");
outputField(2,value1[0],2,"EPS年增率1");
outputField(3,value1[1],2,"EPS年增率2");
outputField(4,value1[2],2,"EPS年增率3");
outputField(5,value1[3],2,"EPS年增率4");

print(file("C:\print\print成長率測試8-rateofchange.log"),date,symbol,close,value1[0],value1[1],value1[2],value1[3],"斜率",linearregslope(value1,4));

因為函式碼沒有提供EPS成長率,因此我先透過rateofchange去計算EPS成長率,並將指定為value1,

我上面程式碼遇到的問題是,value1的頻率好像一直都是用"日"在計算,而非我以為的"季",因為我透過print去看value1[0],value1[1],value1[2],value1[3]的數值,發現當有新的EPS數據公布時,第一天value[0]會改變為最新的EPS年增率,然後第二天時,value[0]跟value[1]會變成最新的EPS年增率,第三天依此類推,直到value1[0],value1[1],value1[2],value1[3]都變成當期的EPS年增率,如附圖一

我預想的是value[0]會是當期的EPS年增率,value[1]會是上一期的,依此類推,我有想過直接把回測的頻率調成"季",但print出來的數據顯示,這樣好像就無法即時在EPS數據一公布時,就立刻透過城市算出EPS年增率並進行選股,而且不知道為何都會有一段時間,value[0]跟value[1]的數值是相同的,如附圖二

因此想問小幫手,我該如何能夠在"日"的圍度去計算四期EPS的年增率並透過linearregslope去計算他的線性回歸斜率呢?

謝謝您

 

附加文件

排序方式: 標準 | 最新
菜酒 發文於   2022/09/04

 附圖二在此,抱歉不太會使用

附加文件

XQ小幫手 發文於   2022/09/13

Hello 菜酒,

 

變數的頻率會跟執行的頻率相同。

所以當用在日頻率上時,value1[1] 會是昨日的資訊。

 

使用季頻率的話,value1[1] 就會是上一季的資訊。

value1[0] 跟 value[1] 會相同,是當該季的eps還未公布時,選股會自動抓最近一期的資訊。

所以取得的數值會是相同的,因為都是計算上一季的資訊。

小幫手建議您在print的時候,可以將日頻率的日期一併print出 (getfield("date", "D")),這樣就會比較容易理解,之所以 value1和 value1[1] 會在月中改變,就是因為新一期的eps資訊公布的原因。

 

如果您要用在日頻率上的話,其中一種作法是直接計算4期的值。

舉例來說:

value1 = rateOfChange(Getfield("EPS","Q"),4);

value2 = rateOfChange(Getfield("EPS","Q")[1],4);

value3 = rateOfChange(Getfield("EPS","Q")[2],4);

value4 = rateOfChange(Getfield("EPS","Q")[3],4);

或是使用 xf_GetValue 來取得,但需注意 xf_GetValue 需要有足夠的資料讀取筆數,所以您最少要算到4期以前的的eps資料。(也就是最少要往前算一年的歷史資料)

關於資料讀取筆數的說明,可以參考連結。

發表回覆
Close