把指標改成函數後,數據不一致的問題~~

  •   433 
  • 最後發表   KKing  2024 十月 30
KKing 發文於   2024/10/14

請教前輩們,我發現當我寫成指標的代碼,轉成函數之後,會有函數的數據和指標的數據不一致的情況,請問這會是什麼原因呢?

例如我測試寫指標:

 

value1=average(average(Volume,22),5);
value2=average(average(volume,60),5);
plot5(iff(lowest(value2,90)<>0,value2/lowest(value2,90),0.01),"test",checkbox:=0);

然後我改成函數:

 

value1=average(average(Volume,22),5);
value2=average(average(volume,60),5);
test=iff(lowest(value2,90)<>0,value2/lowest(value2,90),0.01);

並在選股候用outputfield呈現出來,但是有些個股的outfield的數據和指標的數據並不一致,但有些又是一致。例如6874倍力,指標顯示的數據是1,但是outfield顯示的是0.01,為什麼會這樣???
ps. 我選股時的頻率是日,資料讀取是1000筆。

排序方式: 標準 | 最新
XS小編 發文於   2024/10/21

Hello KKing,

 

小編用您的語法測試,比了 2024/10/14 以前的幾天,看起來數值都相同 (參考附圖)。

推測可能是您的選股腳本沒有在每次腳本執行時都呼叫此函數所導致 (沒有呼叫執行該函數的話,函數中當期的value1 / value2就會維持在前期值)。

 

若還是有問題的話,麻煩提供您的選股策略匯出檔 以及 XQ Log,並告知有問題的日期讓小編確認。

Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。

您可以直接將檔案上傳,如果檔案過大的話也可以保存到雲端後將連結Mail至客服信箱 XQservice@XQ.com.tw 且務必附上 討論文章連結網址(小編才能盡早處理)。

感謝。

 

附加文件

XS小編 發文於   2024/10/24

Hello KKing,

 

就郵件中附圖的狀況,是 value3=epsgrowth(value4); 這行導致錯誤,您將其註解後執行出來的數值就會相同。

因為函數中取用的資料欄位長度壓縮到資料讀取筆數,季頻率的 每股稅後淨利 在 3715 上只有7筆。

KKing 發文於   2024/10/24

謝謝您的幫忙。但是如果不註解掉,請教要怎麼樣才能避免這種取不到數據而造成錯誤的狀況呢?
以下就是這個epsgrowth函數...

input:incomerate(0,numericRef);
var: thisyear(0),lastyear(0),rm(0),i(0);
rm=month(getFieldDate("EPS","Q"));
switch(rm)
    begin
        case 3:
            value1=0;
        case 6:
            value1=1;
        case 9:
            value1=2;
        case 12:
            value1=3;
    end;

thisyear=0;
lastyear=0;

for i=0 to value1
    begin
        thisyear+=GetField("每股稅後淨利(元)","Q")[i];
        lastyear+=GetField("每股稅後淨利(元)","Q")[i+4];
    end;

incomerate=(getfield("累計營收","M")/getfield("累計營收","M")[12]-1)*100;

if thisyear>0 and lastyear<>0 and incomerate>0 then
epsgrowth=(thisyear-lastyear)/absValue(lastyear)*100 else
epsgrowth=-99;

XS小編 發文於   2024/10/30

Hello KKing,

 

如同小編上面所說,因為此函數要取用的資料長度會導致選股腳本可用的資料讀取筆數被壓縮到。

建議您可以將此函數的部分拆出成另一個選股腳本,然後加入相同一個選股策略。

這樣就不會影響到原本的腳本。

 

另外,您可以使用 GetFieldStartOffset 來判斷資料長度是否足夠。

發表回覆
Close