MACDは本当に勝てるのか検証 JPYが凄い結果に

MACDサムネイル 無料インジケーター

今回はMACDは本当に勝てるインジケーターなのか?というのを、インジケーターをストラテジー化して検証してみます。

TradingViewでインジケーターも公開しているので追って紹介ますね。

MACDとは?

MACDとは

相場の「勢い」と「方向」を同時に確認できるインジケーター。

3つの要素で構成されています。

  • MACDライン … 短期EMAと長期EMAの差。ゼロ以上で上昇トレンド
  • シグナルライン … MACDをさらに平滑化した線
  • ヒストグラム … 2本の差を棒グラフ化。棒が伸びるほど勢いが強い

MACDがシグナルラインを上抜けたら買いサイン、下抜けたら売りサインが基本的な使い方です。

MACDは勝てるのか検証

今回の検証はMACDの買いと売りをそのまま持ち続ける方式です。

手数料は片道0.05%で往復0.1%。数量は資産によって増減させずに一定とします。

GOLD

5分足

MacdGold5m

QQEもSuperTrendもそうですが、穏やかな波系インジケーターは短い足がちゃんと地獄に向かいますね。

手数料負けもあると思いますが、恐ろしいことになっています。

1時間足

MacdGold1H

基本的にはマイナス続き。大きなトレンドが発生したときは上昇していますが、それでもかなり急なトレンドが起きないと基本的には目減りしていきます。

1日足

MacdGold1D

GOLDの1日足は現時点ではキレイな右肩上がりですね。コレはGOLDが

このようにキレイな右肩上がり上昇を日足レベルで続けていたため。

上手くはまればという感じですね。

BTC(ビットコイン)

5分足

BTCMACD5m

やはり短い足は超特急で地面を掘りますね。

手数料&繰り返しのマイナスで絶対にやってはいけません。

1時間足

BTCMACD1H

大きな時間足になるとダマシも少なくなるのでプラス圏も見えます。しかしやはり大幅マイナス。

1日足

BTCMACD1D

1日足になるとプラスになっています。

しかし、せっかくの大幅プラス圏だったものが、一気にマイナスになる瞬間も。アナリ参考にしはしたくない。。

1週間足

BTCMACD1W

1週間足になるとかなり毛色がかわりました。ビットコインについては安定しての大幅プラス。

BTCは元々安い値段から一気に今の値段になっています。この上昇時にもキレイなトレンドが続いたためのプラス圏ですね。

ただ、このまま値段が頭打ちになるならこのグラフも変わってくるはずです。

その他成績が良かった通貨と時間足

人気の高い通貨、

  • EUR/USD
  • USD/JPY
  • GBP/USD
  • AUD/USD
  • USD/CAD

で検証しました。

USD/JPY 一週間足

JPYMACD1w

これは恐ろしい結果ですね。2008年頃から続いている円安の影響だと思われます。

ほぼ20年近く右肩上がり。一週間足なのでかなり気長に考えられる人限定ではありますが、プロフィットファクター約2というのは驚異的です。

AUD/USD 一週間足

AUDMACD1W

こちらも2009年頃の大きなトレンドで一気にプラスに。ただ検証の時点でプラスではありますが、右肩下がりが始まっているので今後は不安定になる可能性も高いですね。

まとめ

MACDはRSIなどと違い大きくゆっくり動く指標なので、レンジにとても弱い。しかもかなりキレイなトレンドじゃないとマイナスを繰り返すので単体で使うのは現実的ではありませんね。

あくまでフィルター。他のと組み合わせ、もしくはダイバージェンスなど使い方を工夫する必要がありそうです。

インジケーターを使って検証しましたが、必ずしも今後も同じ結果が保証されるわけではないということをご理解ください。

 

今回検証で使ったMACDは、トレーディングViewで
MACD Crossover Strategy [Long/Short] という名前で公開中です。

オリジナルMACDストラテジー

ストラテジーとアラート機能も付けてあるので必要な方はお使いください。

英語が苦手な方は、ソースコード版は説明文等日本語にしてあります。

//@version=6

// ── MACD設定 ──────────────────────────────────────────────────────────────
float  sourceInput  = input.source(close,  "ソース",             group = "📊 MACD")
int    fastLenInput = input.int(12, "短期期間",   minval = 1,    group = "📊 MACD")
int    slowLenInput = input.int(26, "長期期間",   minval = 1,    group = "📊 MACD")
int    sigLenInput  = input.int(9,  "シグナル期間", minval = 1,  group = "📊 MACD")
string oscTypeInput = input.string("EMA", "オシレーター MA種別", ["EMA", "SMA"], group = "📊 MACD", display = display.none)
string sigTypeInput = input.string("EMA", "シグナル MA種別",     ["EMA", "SMA"], group = "📊 MACD", display = display.none)

// ── ストラテジー設定 ──────────────────────────────────────────────────────
string entryInput = input.string("MACDxSignal", "エントリー条件",
     options = ["MACDxSignal", "HistCross0"], group = "⚙️ ストラテジー設定",
     tooltip = "MACDxSignal: MACDラインがシグナルラインをクロス / HistCross0: ヒストグラムが0をクロス")
bool  longInput  = input.bool(true,  "ロング有効",                               group = "⚙️ ストラテジー設定")
bool  shortInput = input.bool(true,  "ショート有効",                             group = "⚙️ ストラテジー設定")
float qtyInput   = input.float(1.0,  "ロットサイズ", minval = 0.01, step = 0.01, group = "⚙️ ストラテジー設定")

// commission_value / slippage は const 必須のため直接指定
// ストラテジープロパティタブからも変更可能
strategy("MACD Crossover Strategy [Long/Short]", "MACD X [L/S]",
     overlay           = false,
     commission_type   = strategy.commission.percent,
     commission_value  = 0.1,
     slippage          = 2,
     default_qty_type  = strategy.fixed,
     default_qty_value = 1)

// ── MA関数 ────────────────────────────────────────────────────────────────
ma(float source, int length, simple string maType) =>
    switch maType
        "EMA" => ta.ema(source, length)
        "SMA" => ta.sma(source, length)

// ── MACD計算 ──────────────────────────────────────────────────────────────
float maFast = ma(sourceInput, fastLenInput, oscTypeInput)
float maSlow = ma(sourceInput, slowLenInput, oscTypeInput)
float macd   = maFast - maSlow
float signal = ma(macd, sigLenInput, sigTypeInput)
float hist   = macd - signal
color hColor = hist >= 0 ? hist > hist[1] ? #26a69a : #b2dfdb : hist > hist[1] ? #ffcdd2 : #ff5252

// ── エントリーシグナル ────────────────────────────────────────────────────
bool longSignal  = entryInput == "MACDxSignal" ? ta.crossover(macd, signal)  : ta.crossover(hist, 0)
bool shortSignal = entryInput == "MACDxSignal" ? ta.crossunder(macd, signal) : ta.crossunder(hist, 0)

// ── エントリー / エグジット ───────────────────────────────────────────────
if longSignal
    if longInput
        strategy.entry("Long", strategy.long,  qty = qtyInput)
    else if strategy.position_size < 0
        strategy.close("Short")

if shortSignal
    if shortInput
        strategy.entry("Short", strategy.short, qty = qtyInput)
    else if strategy.position_size > 0
        strategy.close("Long")

// ── アラート条件 ──────────────────────────────────────────────────────────
alertcondition(longSignal,                "🟢 Long Entry",   "MACD: Long entry signal triggered")
alertcondition(shortSignal,               "🔴 Short Entry",  "MACD: Short entry signal triggered")
alertcondition(hist[1] >= 0 and hist < 0, "📉 Hist Falling", "MACD Histogram: switched from rising to falling")
alertcondition(hist[1] <= 0 and hist > 0, "📈 Hist Rising",  "MACD Histogram: switched from falling to rising")

// ── プロット ──────────────────────────────────────────────────────────────
hline(0, "Zero", #787b8680)
plot(hist,   "Histogram",   hColor,      style = plot.style_columns)
plot(macd,   "MACD",        color.blue)
plot(signal, "Signal Line", #ff6d00)

plotshape(longSignal  and longInput,  "Long Signal",  shape.triangleup,   location.bottom, color.new(color.green, 0), size = size.small)
plotshape(shortSignal and shortInput, "Short Signal", shape.triangledown, location.top,    color.new(color.red,   0), size = size.small)

 

コチラです。よければ検証等にお使いください。

コピペで使えるインジケーターについて

TradingViewへの追加の仕方がわからない方は

≫【画像で簡単】TradingViewオリジナルインジケーター追加方法

コチラの記事を参考にしてください。慣れると簡単ですよ。

 

もし「こんなインジケーターが欲しい」という希望があれば、コメント欄にどうぞ。

トレーディングビュー用限定になってしまいますが、可能な範囲で作りますのでお気軽に

投資についての免責事項

当ブログで紹介する情報は、あくまで個人的な見解や分析結果であり、投資を推奨するものではありません。実際の投資判断は、ご自身の責任において行っていただきますようお願いいたします。
詳しくは免責事項をご覧ください。

無料インジケーター
シェアする
Shiroiをフォローする

コメント

タイトルとURLをコピーしました