選股結果出包

  •   204 
  • 最後發表   河馬  2021 七月 16
河馬 發文於   2021/07/04

小幫手你好

我有選股策略,從6/30有30多筆符合名單,到7/1時突然變0筆符合名單

想知道是哪一條條件造成突然沒有符合名單

點選不符合名單,顯示的只有清單,沒有腳本的計算結果,實在難判斷大概是哪一條造成影響

必須一條條去試

請問不符合清單能比照符合清單一樣列出計算結果嗎?

排序方式: 標準 | 最新
河馬 發文於   2021/07/05

小幫手你好

我將選股條件測試了一下,發現突然變沒有符合名單應該是季財報數據有問題,如下圖

計算出來的季毛利率季增等三項數據是0,只要將這個條件列為非必要就出現名單了,不可能台股全部都沒有財報季增的公司吧!

請協助排除問題,謝謝

XQ小幫手 發文於   2021/07/07

Hello 河馬,

 

關於您第一個問題,您可以直接設ret = 1這樣的話就可以全部顯示。

然後您再使用 OutputField 函數顯示符合條件的商品。(例如說符合顯示1,不符合顯示0)

 

第二個問題由圖上來看您使用的是應該是營業毛利率欄位,所以小幫手使用此欄位作測試,但是結果是正常的。

細節參考附圖和附檔。

需要麻煩您提供 選股中心匯出檔並勾選(包含)選股腳本、以及XQ Log 來檢視原因。

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

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

感謝。

 

附加文件

河馬 發文於   2021/07/07

小幫手你好

檔案已寄信箱,請查收

XQ小幫手 發文於   2021/07/09

Hello Hello 河馬,

 

小幫手看了您提到的季財報數據(基本面財報三率腳本),裡面有發生執行錯誤的原因是除以0,所以將作了修改。

建議您可以將

condition2=value4/(value4+value5)>0.8;

outputfield13(value4/(value4+value5)*100,"季本業佔比");

修改為

if (value4+value5) <> 0 then condition2=value4/(value4+value5)>0.8 else condition2 = False;

if (value4+value5) <> 0 then outputfield13(value4/(value4+value5)*100,"季本業佔比") else outputfield13(0,"季本業佔比");

這樣就不會錯誤了。

 

value 變數取季財報值作運算的部分可能有問題,小幫手會與工程師確認。

但如果您急著需要用的話可以先作以下修改。

 

將value1 到 value5 刪除。

 

然後將包含 value6 以後有用到 季財報資訊的計算從(以value6為範例)

value6=truecount(value1>value1[1],12);

修改為

if getfielddate("營業毛利率","q") <> getfieldDate("Date", "Q") then value6=truecount(getfield("營業毛利率","q")[1]>getfield("營業毛利率","q")[2],12) else value6 = truecount(getfield("營業毛利率","q")>getfield("營業毛利率","q")[1],12);

也就是先作個當季的財報資訊是否已經出來的判斷,若還沒有的話則去取上季的財報資訊。

這樣的話應該就可以了。

感謝

河馬 發文於   2021/07/09

小幫手你好

謝謝你的幫助,我沒有考慮到會有除以0的狀況,這樣寫確實比較嚴謹

 

關於第二段提到的value變數問題,

因為這腳本是6/30以前都沒出問題,到了7月才出錯,所以仍有問題想要請教。

1.使用value變數這麼久了,為何到7月就突然失靈?

  而且同樣的腳本請看27~32行,其中27~29行計算季增出問題都變0,但30~32計算年增卻是有數字出來的

  為何同一個腳本會有兩種結果?

2.按照小幫手建議的捨棄value變數,通通直接用getfield指令後變正常,

  但這樣腳本容易寫錯,尤其是()常會漏掉,請幫忙讓value變數能夠使用,這樣腳本會簡潔很多

XQ小幫手 發文於   2021/07/12

Hello 河馬,

 

由於是相同頻率(都是季),所以應該是要可以使用value沒錯。

但是現在這個時間點會發生對位問題,value1[0] 跟 value1[1] 出來的數值會相同,進而導致您說的:季都是0但年增卻是有數字出現的狀況。

目前工程師正在研究該如何修正,但何時會修正完畢小幫手無法確定。

所以才建議您直接用 getfield("營業毛利率","q")[0] 跟 getfield("營業毛利率","q")[1],因為小幫手測試過這種寫法不會出問題。

感謝。

河馬 發文於   2021/07/14

小幫手你好

最近幾天試了一下,關於你說的對位問題似乎不存在

在我的理解裡,value變數是用來存放getfield指令抓出來的數值

因為value 存的是 getfield("營業毛利率","q") 的數據,如果因為對位問題會有 value[0]=value[1] 的結果,那應該 getfield[0] = getfield[1]。

但使用 getfield[0] 直接抓到最新的就是2021Q1財報數據,

加了你說的季財報日期資訊判斷後反而出錯,

會因為 財報Q1<>日期Q2 而去跑 value6=truecount(getfield("營業毛利率","q")[1]>getfield("營業毛利率","q")[2],12),反而變成從2020Q4去抓數據

XQ小幫手 發文於   2021/07/16

Hello 河馬,

 

現在會出問題的部分在於如果用value1 = getfield("營業毛利率","q")的話,會發生 value1[0] = value1[1] 的錯誤。(因為不合理所以才是錯誤)

建議您現在不要用value1,將腳本修改為使用 getfield("營業毛利率","q") 跟 getfield("營業毛利率","q")[1]即可。

getfield("營業毛利率","q") 跟 getfield("營業毛利率","q")[1]不會相等,但是用 value1 跟 value1[1] 的話會發生相等的狀況。

Date判斷的部分是小幫手弄錯跟日頻率資訊搞混,季的營業毛利率不會有資料欄位不存在的問題。

感謝提醒。

發表回覆
Close