請問跨頻及跨商品寫法問題

  •   240 
  • 最後發表   老王837  2022 八月 03
老王837 發文於   2022/07/22

我寫一個指標要顯示大盤日線的MACD osc值, 在其他商品的分鐘線為何無法顯示, 在日線是正常

 

input:FastLength(12, "DIF短期數");

input:SlowLength(26, "DIF長期數");

input:MACDLength(9, "MACD期數");

 

var: _price_tse(0), _dif_tse(0), _macd_tse(0), _osc_tse(0);

 

_price_tse = (2 * GetSymbolField("TSE.TW","Close","D") + GetSymbolField("TSE.TW","high","D") + GetSymbolField("TSE.TW","low","D")) / 4;

_dif_tse = xfmin_XAverage("D",_price_tse, FastLength) - xfmin_XAverage("D",_price_tse, SlowLength); 

_macd_tse = xfmin_XAverage("D",_dif_tse, MACDLength) ; 

_osc_tse = _dif_tse - _macd_tse; 

 

plot1(_osc_tse,"_osc_tse");

 

排序方式: 標準 | 最新
musashi 發文於   2022/07/22

改這樣試試看

input:FastLength(12, "DIF短期數");
input:SlowLength(26, "DIF長期數");
input:MACDLength(9, "MACD期數");
settotalBar((270/barInterval*139)+1);

老王837 發文於   2022/07/25

感謝指教, 加上 settotalBar((270/barInterval*139)+1); 看起來接近正常, 可是還是跟日線顯示的值不一樣, 

不知道是不是顯示在台指近月商品的關係(FIMTXN*1 小型台指近月)

還有跨頻時的bar資料預讀為何是這樣算?

musashi 發文於   2022/07/25

//你可以參考XQ內建MACD公式中的SetTotalBar
input:FastLength(12, "DIF短期數"),SlowLength(26, "DIF長期數"),MACDLength(9, "MACD期數");
SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 3 + 8);   //XQ內建警示腳本
SetTotalBar((maxlist(FastLength,SlowLength,6) + MACDLength) * 4    );   //XQ內建選股腳本

//以下是自己測試,準確率可以到小數第四位,但是很吃資源。
SetTotalBar((270 / barInterval * (maxlist(FastLength,SlowLength) + MACDLength) * 7) + 1);   //分鐘頻跨日頻使用
SetTotalBar((maxlist(FastLength,SlowLength  ) + MACDLength) * 7 + 1);   //日頻使用

XQ小幫手 發文於   2022/08/03

Hello 老王837,

 

MACD計算上使用到指數平均,而這種平均方是會受到前期值影響,所以需要有足夠長度的資料來計算才能有正確的數值。

而要設的長度,您可以參考內建的MACD腳本,並將其依據指標使用的頻率換算成日頻率,而這也是 settotalBar((270/barInterval*139)+1) 所做的。

270/barInterval 是計算1天內有幾根K棒

139 約等於 (26+9) * 4。

就相當於MACD在日頻率計算下需要幾根日頻率的Bar,換算成分鐘頻率的話則是要幾根。

 

不過您是用在指標上,最簡單的方法就是將設定中的指標計算範圍調長 (相當於調長settotalbar數值),即可計算出正確的值。(參考附圖)

 

感謝 musashi 的熱心回覆。

附加文件

發表回覆
Close