xfMin_MACD 跨頻率與圖表 MACD 不一致

  •   106 
  • 最後發表   I100255884  2026 七月 09
I100255884 發文於   2026/07/02

大家好,

我目前在 策略雷達 測試跨頻率 MACD,想請教 xfMin_MACD() 的正確使用方式。

目前策略雷達主頻率設定為 5 分鐘,程式如下:

 

MACD(WeightedClose(),12,26,9,Dif5,Macd5,Osc5);

xfMin_MACD(
"60",
xfMin_WeightedClose("60"),
12,26,9,
Dif60,
Macd60,
Osc60);

if Osc5 > 0
and Osc60 > 0 then
ret = 1;

 

測試目的很單純:

5 分鐘 MACD 為紅柱,且 60 分鐘 MACD 也為紅柱。


已經做過的測試

  1. 只測 5 分鐘 MACD(不用 xfMin_MACD)

策略雷達結果幾乎都與圖表一致,只有少數個股因盤中即時變動有時間差,我認為這是正常現象。

  1. 加入 60 分鐘 xfMin_MACD 後

策略雷達會選出一些股票,但我打開 60 分圖 查看時,MACD OSC 仍然是明顯綠柱,例如:

  • OSC = -0.13
  • OSC = -0.38
  • OSC = -0.01

這些都不是接近 0 軸的小幅波動,而是明顯仍為負值。


我有考慮時間差

我知道策略雷達是盤中即時運算,因此有可能:

  • 策略雷達觸發時是紅柱
  • 我打開圖表時行情已經變動,又變回綠柱

這種情況我可以理解。

但我實際比對後,有些案例 OSC 已經是 -0.13、-0.38 等明顯負值,因此感覺不像只是時間差造成,所以想確認是否還有其他原因。


想請教

  1. xfMin_MACD() 回傳的 Osc60 是否與 60 分圖上的 MACD OSC 完全一致?
  2. xfMin_MACD() 回傳的是:
    • 目前尚未收盤的 60 分 K?
    • 還是上一根已完成的 60 分 K?
  3. 在策略雷達使用跨頻率時,Osc60 > 0 是否可能因為跨頻率資料同步或對位方式,而與圖表看到的 60 分 MACD 不一致?
  4. 如果我要在 5 分策略雷達 中,正確判斷 60 分 MACD 是否為紅柱,官方建議的寫法是什麼?

是否有比 xfMin_MACD() 更適合的方式?

 

謝謝!

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

你準備的資料不足,算出來的技術指標數值就不會與技術分析圖表的一樣。請加入一行指令。

setTotalBar(3600);

 

  • 按讚來自於
  • I100255884
I100255884 發文於   2026/07/06

以更正

目前使用 5 分鐘當主頻率,15 分鐘當輔助週期,SetTotalBar 已改成 3600。

策略邏輯如下:

  1. 5 分鐘 MACD:綠柱收斂
    條件是:
    osc5 < 0 and osc5 > osc5[1]
  2. 15 分鐘 MACD:紅柱放大 或 綠柱收斂
    目前我想做的是「盤中即時版」,也就是 15 分鐘 K 不等收 K,只要目前正在形成中的 15 分鐘 MACD 符合條件就觸發。

15 分鐘條件寫法如下:

xfMin_MACD("15", xfMin_WeightedClose("15"),
FastLength15, SlowLength15, MACDLength15,
dif15, macd15, osc15);

osc15_now = osc15;
osc15_prev = xfMin_GetValue("15", osc15, 1);

cond15 =
(osc15_now > 0 and osc15_now > osc15_prev)
or (osc15_now < 0 and osc15_now > osc15_prev);

我的理解是:

  • osc15_now 是目前正在形成中的 15 分鐘 MACD 柱
  • osc15_prev 是上一根已完成的 15 分鐘 MACD 柱
  • 如果 osc15_now < 0 且 osc15_now > osc15_prev,應該代表 15 分鐘 MACD 綠柱正在收斂

但今天實際跑策略雷達時,卻出現一些股票,圖上是 15 分鐘 MACD 綠柱正在放大,不是綠柱收斂。

想請問:

  1. 我這樣用 xfMin_MACD("15", ...) 搭配 xfMin_GetValue("15", osc15, 1) 的寫法,是否正確?
  2. xfMin_GetValue("15", osc15, 1) 取到的,是上一根已完成 15 分鐘 K 的 MACD 柱嗎?
  3. 如果我要在 5 分鐘主頻率下,判斷 15 分鐘「正在形成中的 MACD 綠柱收斂」,正確寫法應該怎麼寫?

以下是完整程式碼:

// 5分:MACD綠柱收斂
// 15分:MACD紅柱放大 or 綠柱收斂
// 盤中版:15分不等收K,只要當下符合就觸發
// 5分 MACD:12 / 26 / 9
// 15分 MACD:15 / 19 / 10

input:
FastLength5(12),
SlowLength5(26),
MACDLength5(9),

FastLength15(15),
SlowLength15(19),
MACDLength15(10);

variable:
dif5(0),
macd5(0),
osc5(0),

dif15(0),
macd15(0),
osc15(0),
osc15_now(0),
osc15_prev(0),

cond5(false),
cond15(false);

SetTotalBar(3600);

ret = 0;

// 5分:MACD 綠柱收斂
// 主頻率請設定 5分鐘

MACD(WeightedClose(), FastLength5, SlowLength5, MACDLength5,
dif5, macd5, osc5);

cond5 =
osc5 < 0
and osc5 > osc5[1];

// 15分:跨週期 MACD
// 看正在形成中的15分K

xfMin_MACD("15", xfMin_WeightedClose("15"),
FastLength15, SlowLength15, MACDLength15,
dif15, macd15, osc15);

// 盤中即時版:
// osc15_now = 目前正在形成中的15分MACD柱
// osc15_prev = 上一根已完成的15分MACD柱

osc15_now = osc15;
osc15_prev = xfMin_GetValue("15", osc15, 1);

// 15分條件:紅柱放大 or 綠柱收斂

cond15 =
(osc15_now > 0 and osc15_now > osc15_prev)
or (osc15_now < 0 and osc15_now > osc15_prev);

// 最終觸發

if cond5
and cond15
then ret = 1;

謝謝教授。

虎科大許教授 發文於   2026/07/06

初步看來,你的程式應該沒問題。請留意技術分析圖表上MACD使用的參數與你程式的參數是否一樣。另外,你也需要留意時間差。若盤中OSC在0附近,很可能警示時確實綠柱收斂,但看的時候卻已放大。

I100255884 發文於   2026/07/09

上一個部分確實是時間差造成,因為是以正在形成K棒的參數做篩選。

但我還有另一個問題想要請教教授:

很多符合條件的股票偵測不到,參數確認沒錯,也對過幾支股票確認不是時間差的關係,例如: 4919新唐 2026/07/09  上午9點32分,條件全部符合,1分綠柱至少有4支的K棒讓策略雷達偵測5分及30分的條件,所以才排除時間差的。(如要對照須注意圖表參數設置)

然後不符合條件的股票卻跑出來,例如:5351鈺創 2026/07/09 上午9點17分偵測到,但當時的1分K是紅柱(設置的條件要是綠柱)

有其他我沒有注意到的事項嗎?

謝謝教授

 字串限制,原始碼貼在下一段。

附加文件

虎科大許教授 發文於   2026/07/09

這三種頻率的MACD是否同時符合條件,是根據盤中Tick價格計算而得。你現在看到的盤後指標是按照K棒的收盤價計算。這兩者是兩回事。盤後三個指標符合,不代表盤中三者同時符合。

I100255884 發文於   2026/07/09

了解,謝謝教授👍🏾

發表回覆
Close