請問可以如何避開Average找不到內容的問題

  •   123 
  • 最後發表   mm巧克力  2022 十一月 09
mm巧克力 發文於   2022/11/05

這是月線 (紅框處為240ma 沒資料)

這是我寫的判斷式

如果收盤價有站上月線的240ma就執行動作

if(GetField("收盤價", "M") >= Average(GetField("收盤價", "M"), 240)) then ...

但因為Average(GetField("收盤價", "M"), 240)沒有完整資料可以被運算

請問可以怎麼加判斷式才不會讓整個程式運算卡在這邊呢?

 

謝謝小幫手

 

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/11/08

 Hello mm巧克力,

 

就小幫手所知,如果您是使用選股腳本的話,可以使用 GetFieldStartOffset 函數來取得欄位資料筆數。

其他腳本的話應該沒辦法用函數取得資料長度,不過可以考慮使用 currentbar,會回傳目前運算過的筆數。(會受settotalbar影響)

可以使用這個資訊來限制筆數。

mm巧克力 發文於   2022/11/08

小幫手你好:

如果有以下這種需求
你會怎麼建議呢?

if(GetField("收盤價", "M") >= Average(GetField("收盤價", "M"), 240)) then

else if(GetField("收盤價", "M") >= Average(GetField("收盤價", "M"), 120)) then

else if(GetField("收盤價", "M") >= Average(GetField("收盤價", "M"), 60)) then

這種邏輯對於上市櫃不到10年以上

應該都會遇到資料不夠的問題...

 

謝謝小幫手

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

Hello mm巧克力,

 

小幫手會建議您改在選股中心使用 GetFieldStartOffset 確認筆數資料計算,然後用 outputfield 輸出確認數值。

舉例來說:

value1 = GetFieldStartOffset("收盤價", "M");

if value1 > 240 then value2 = Average(GetField("收盤價", "M"), 240)) else value2 = 0;

if value1 > 120 then value3 = Average(GetField("收盤價", "M"), 120)) else value3 = 0;

if value1 > 60 then value4 = Average(GetField("收盤價", "M"), 60)) else value4 = 0;

這樣 value2 ~ value4 就會是對應的平均價,如果長度不夠的話則會是0。

發表回覆
Close