以更正
目前使用 5 分鐘當主頻率,15 分鐘當輔助週期,SetTotalBar 已改成 3600。
策略邏輯如下:
- 5 分鐘 MACD:綠柱收斂
條件是:
osc5 < 0 and osc5 > osc5[1]
- 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 綠柱正在放大,不是綠柱收斂。
想請問:
- 我這樣用
xfMin_MACD("15", ...) 搭配 xfMin_GetValue("15", osc15, 1) 的寫法,是否正確?
xfMin_GetValue("15", osc15, 1) 取到的,是上一根已完成 15 分鐘 K 的 MACD 柱嗎?
- 如果我要在 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;
謝謝教授。
6 評論