MACD讀取的問題

  •   29 
  • 最後發表   麥叔  12 小時前
麥叔 發文於   2026/01/20

許教授,我遇到一個奇怪的問題,MACD讀取資料,放的位置會影響。下面是code,放在目前的位置(54行),不會讀到正確的資料。但是放在一開始(13行),就可以得到正確的值。謝謝許教授~

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2026/01/20

第一種情況是每根歷史K棒都會計算MACD指標,這種做法才正確。第二種是特定條件才計算,沒有用連續K棒計算指標,無法計算正確的指標數值。

麥叔 發文於   2026/01/20

如果我將MACD計算放在 if isFirstCall("Bar") and bTrading then begin 這個裡面? 也是每根K棒都會計算一次,這樣可以嗎?

虎科大許教授 發文於   2026/01/20

為什麼這麼麻煩?既然我們需要它每根K 或甚至每個Tick都運算,就應該放在最上面。

麥叔 發文於   2026/01/20

因為我在特殊狀況才會用到MACD,並不是每個tick都需要用。如果每個tick都運算,會讓每個tick的執行時間拉長。所以才會想放在 if isFirstCall("Bar") 裡面,這樣每個tick就不會占用很多時間,只有FirstCall才會跑久一點

虎科大許教授 發文於   2026/01/20

若你只在每個K棒都計算MACD,這樣應該沒問題。你目前的寫法是當filled等於0才計算,而filled<>0就沒計算,這樣算出來的MACD就不會正確。

  • 按讚來自於
  • TAC214
麥叔 發文於   2026/01/20

報告許教授,我把MACD計算移到19行的位置,還是沒辦法得到正確的值,所以一定要每個TICK都計算?

除了MACD,其他的技術指標也是這樣嗎?

謝謝您的耐心說明

虎科大許教授 發文於   2026/01/20

問題是你限制bTrading也要是True才會計算MACD,所以數值會錯誤。無論bTrading是否為True,都必須計算MACD。

麥叔 發文於   2026/01/20

啊,明白了,謝謝許教授

XS小編 發文於   2026/01/27

Hello 麥叔,

 

小編補充,MACD是計算時需要用到前期運算結果的函數。(取跨頻率值時需用xf開頭的函數皆是此類型)

因此若前一根K棒結束時沒有運算的話,那麼變數的前期值就可能有偏差,導致MACD運算的結果出錯。

不論您是否每次洗價是否有用到MACD,最好都讓MACD運算,否則就無法確保K棒結束時MACD函數有運算到。

發表回覆
Close