要如何篩選周OSC value比前一周的OSC value增加呢

  •   311 
  • 最後發表   Max5168  2022 五月 30
Max5168 發文於   2022/05/22

你好, 我想篩選週osc value比前一週的osc value 增加的股票使用了以下寫法

xf_MACD("w", xf_weightedClose("w"),12, 26, 9, value1, value2, value3);

if value3 > value3[1] then ret = 1; 

但是我發線這樣篩選的結果有部分是錯誤的(當OSC value為正的時候好像不太對)

舉例我在2022 0521跑的篩選結果會出現: 綠電

綠電前一週的OSC value是1.346 本週是0.654 應該是遞減的

請問該怎麼修正呢

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

Hello Max5168,

 

MACD需要足夠的資料讀取筆數才能計算出正確的數值。

您應該是沒有使用足夠的筆數導致計算出來的數字有誤。

您可以參考內建選股腳本計算MACD所使用的筆數長度:

SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 4);

不過從您的描述,您應該是是日頻率跨週頻率,所以小幫手會建議您多*5會比較適合。

SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 4 * 5);

 

另外,若您是使用日頻率的話,value3 > value3[1] 會是當日跟前日的週OSC 去作比較,而不是當週與前週的OSC。

要取得前週的資料您可以參考 xf_GetValue 函數。

Max5168 發文於   2022/05/26

Hi 小編

有兩個問題再幫忙解惑一下 謝謝

1. 使用SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 4); 跑出來的結果一樣不正確 如20220527跑的話會出現新光金這個不對的結果, 程式碼跟結果如下圖

//程式碼就這麼簡單

input: FastLength(12), SlowLength(26), MACDLength(9);

variable: difValue(0), macdValue(0), oscValue(0);

SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) *4);

//value1:週DIF, value2:週MACD, value3:週osc

xf_MACD("w", xf_weightedClose("w"),12, 26, 9, value1, value2, value3);

if  (value3 >= value3[1])

 

then ret = 1;

Max5168 發文於   2022/05/26

2. 使用這個: SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 4 * 5); 開始執行策略後 會一直跑不出來如下圖 他會變成紅燈然後一直跑不出結果(等了1小時都跑不出來)

 

 

附加文件

XQ小幫手 發文於   2022/05/30

Hello Max5168,

 

您可以先參考 資料讀取範圍與腳本執行的關係 此篇文章,了解 SetTotalBar 的運作方式。

 

1. 如果您是使用 日頻率跨週頻率 的話,那麼使用 SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 4); 會因為資料讀取筆數不夠導致運算不出正確結果。

您可以搭配使用

outputField1(value3);

outputField2(value3[1]);

來檢查 osc 是否有運算正確。

 

2. 就圖片來看,可能是因為多商品運算過久導致逾時,最簡單的解決方法是建議您可以直接使用 週頻率 然後搭配 MACD,這樣就不用運算 5 倍的資料讀取筆數。(參考附圖)

若您需要其他日頻率的條件,可以另外撰寫選股腳本,然後將其加到同一個選股策略後選擇日頻率即可。

附加文件

發表回覆
Close