シェア:

ビットコイン、「人気すぎ?」「不人気すぎ?」な時に反対をねらう作戦!その結果はどうだった?

この作戦は、ビットコインの値段が短い時間で上がりすぎたり、下がりすぎたりしたときに、反対に動くことをねらう「MFI逆張り(ぎゃくばり)作戦」です。5分ごとの値動きを見て、たくさん取引をしてみたらどんな成績になったか、わかりやすく見ていきましょう。

取引数
519
勝率
37.96%
最終リターン
-81.86%
最大DD
82.20%

導入と前提条件

この作戦は、ビットコインの値段が短い時間で上がりすぎたり、下がりすぎたりしたときに、反対に動くことをねらう「MFI逆張り(ぎゃくばり)作戦」です。5分ごとの値動きを見て、たくさん取引をしてみたらどんな成績になったか、わかりやすく見ていきましょう。

【検証】戦略のバックテスト概要

  • 戦略名: MFI Reversal を使用したトレンド追従戦略
  • 対象銘柄: BTC/USDT
  • 時間足: 5m
  • 期間: 2024-09-18〜2025-08-25(340日間)
  • 初期資金: $10,000
  • 手数料・スリッページ: 0.1% / 0.1%
  • 取引所: binance

MFI Reversal の理論的背景

この作戦の裏には、人の気持ちの動きが関係しています。値段が急に下がると、みんな「こわい!もっと下がるかも!」と焦って売ってしまいます。逆に急に上がると、「チャンスを逃したくない!」と慌てて買ってしまいます。こういう一時的な焦りや盛り上がりで、値段が行きすぎてしまうことがあるんです。この作戦は、そんな「行きすぎた値段」が、冷静になったときに元の位置に戻ろうとするところをねらって、利益を出そうとする考え方です。

具体的な売買ルール(今回の検証)

エントリー条件

  • MFIというヒントの数字が20より小さくなったら、「売られすぎ」のサインです。この瞬間に「買い」のチャンスと考えます。
  • MFIの数字が80より大きくなったら、「買われすぎ」のサインです。この瞬間に「売り」のチャンスと考えます。

エグジット条件

  • 買った後は、目標の利益が出たら取引を終わりにします。もし予想が外れて損が出ても、大きくなる前に取引を終わりにして、被害を小さくします。
  • 売った後も同じです。目標の利益が出たら終わりにして、損が大きくなる前にも終わらせます。

リスク管理

大きな失敗をしないためのルールも大切です。1回の取引で使うお金は、最初に決めた額までにします。もし負けても大丈夫な範囲でやるのがポイントです。こうすることで、もし予想が外れても、ダメージを一番小さくできます。

再現手順(HowTo)

  1. Python/依存(ccxt, pandas, ta)をインストール
  2. ccxtでBTC/USDTのOHLCVを取得して前処理
  3. 『MFI Reversal』に必要な指標を算出(ta 等)
  4. 閾値・クロス条件から売買シグナルを生成
  5. 手数料・スリッページを加味して検証・評価

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数519回
勝率37.96%
平均利益0.61%
平均損失-0.89%
期待値-0.32%
プロフィットファクター0.47
最大ドローダウン82.2%
最終リターン-81.86%
シャープレシオ-0.25
HODL(Buy&Hold)86.34%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/usr/bin/env python3
"""
MFI(Money Flow Index)逆張り戦略
出来高を考慮したRSI、資金流入・流出を測定
"""
import pandas as pd
import numpy as np


def calculate_mfi_signals(df: pd.DataFrame, mfi_period: int = 14, 
                         oversold: float = 20, overbought: float = 80) -> pd.DataFrame:
    """
    MFI逆張りシグナルを生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    mfi_period : int
        MFI計算期間(デフォルト: 14)
    oversold : float
        売られすぎ水準(デフォルト: 20)
    overbought : float
        買われすぎ水準(デフォルト: 80)
    
    Returns:
    --------
    pd.DataFrame
        シグナル列が追加されたDataFrame
    """
    df = df.copy()
    
    # Typical Price
    df['typical_price'] = (df['high'] + df['low'] + df['close']) / 3
    
    # Raw Money Flow
    df['raw_money_flow'] = df['typical_price'] * df['volume']
    
    # Positive and Negative Money Flow
    df['money_flow_positive'] = np.where(
        df['typical_price'] > df['typical_price'].shift(1),
        df['raw_money_flow'],
        0
    )
    df['money_flow_negative'] = np.where(
        df['typical_price'] < df['typical_price'].shift(1),
        df['raw_money_flow'],
        0
    )
    
    # Money Flow Ratio
    positive_flow = df['money_flow_positive'].rolling(window=mfi_period).sum()
    negative_flow = df['money_flow_negative'].rolling(window=mfi_period).sum()
    df['money_flow_ratio'] = positive_flow / negative_flow
    
    # MFI計算
    df['mfi'] = 100 - (100 / (1 + df['money_flow_ratio']))
    
    # シグナル生成
    df['is_buy'] = (
        (df['mfi'] < oversold) & 
        (df['mfi'].shift(1) >= oversold)
    )
    
    df['is_sell'] = (
        (df['mfi'] > overbought) & 
        (df['mfi'].shift(1) <= overbought)
    )
    
    # NaN値をFalseに置換
    df['is_buy'] = df['is_buy'].fillna(False)
    df['is_sell'] = df['is_sell'].fillna(False)
    
    print(f"MFI逆張り: 期間={mfi_period}, 売られすぎ={oversold}, 買われすぎ={overbought}")
    print(f"買いシグナル数: {df['is_buy'].sum()}")
    print(f"売りシグナル数: {df['is_sell'].sum()}")
    
    return df

なぜこの結果になったのか(3つの理由)

  1. 1この作戦を試したところ、519回も取引をしましたが、勝てたのは10回中4回もありませんでした。つまり、半分以上は負けてしまった、ということです。
  2. 2平均すると、1回取引するたびに、少しずつお金が減っていく計算でした。これを続けると、どんどんお金が減ってしまうことになります。
  3. 3利益と損を比べると、損のほうがずっと大きかった、という結果でした。だから、この作戦では儲けるのが難しかったんです。最終的に、もとのお金が大きく減ってしまったのは、これらの理由が重なったからです。

この結果から学べる3つの教訓

  1. 1「みんなと反対の動きをねらう」作戦は、タイミングがずれると大きな損につながりやすいことがわかりました。特に、値段が上がり始めたら、そのままどんどん上がり続けるような「強い流れ」があるときは、この作戦はうまくいきません。
  2. 2MFIのようなヒント一つだけを信じるのは、ちょっと危ないのかもしれないと学びました。他のヒントや、世の中のニュースなども一緒に見て判断することが大切です。
  3. 3今回試した期間では、この作戦を使うよりも、ただビットコインを買ってずっと持っていた方が、ずっと良い結果になっていました。つまり、何もしない方が良かった、ということです。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金は、持っているお金全部のうちの、ほんの一部(例えば100分の1)だけにします。こうすれば、もし負けても、失うお金は少しですみます。

損失が大きくなったときの対処法

もし、損が続いてしまって、持っているお金が一定の割合(例えば10分の1)より減ってしまったら、一度全部の取引をやめます。そして、作戦を見直すなど、冷静になる時間を作ることが大切です。

資金管理の方法

一度にたくさんのお金を使わないように気をつけます。長く取引を続けていくためには、自分のお金を守ることが一番大事だからです。

改良案の具体的提案

  • 「売られすぎ」「買われすぎ」を判断する数字のルール(20や80)を、もっとピッタリなものに変えてみます。また、MFIだけでなく、他のヒント(例えば、値段の平均を見るものなど)と組み合わせて、もっと確実なタイミングをねらいます。
  • 値段が一方向にどんどん動いている「強い流れ」があるときは、この作戦は休みます。そういう流れがあるかどうかを見分ける新しいルールを追加します。
  • 取引の回数が多すぎると、そのたびに手数料がかかってしまいます。なので、「これだ!」という本当に良いチャンスの時だけ取引するようにして、回数を減らしてみます。

実用性の向上(運用上の注意)

  • この作戦は5分ごとの細かい値動きを見るので、ちょっとした動きにだまされやすいです。だから、もっと大きな時間の流れ(1時間や4時間ごとの動き)も見て、全体の方向を確認することが大切です。
  • MFIの数字だけじゃなく、グラフの形(例えば、下に長い線が出ているかなど)や、他のヒントが出すサインも一緒に見ることで、もっと成功しやすいチャンスを見つけやすくなります。
  • 今回のテストの結果は、あくまでも過去のデータで試したものです。未来も同じ結果になるかはわかりません。本当に取引するときは、まず少ないお金で試したり、練習用のモードで試したりすることがとても大事です。

検証の透明性と信頼性

  • データの出所: 使ったデータは、もらったデータに基づいています。
  • 検証のやり方: Pythonというプログラミング言語を使って、決められた期間のビットコインの5分ごとの値動きデータで、この作戦がうまくいったかどうかをテストしました。
  • コード: テストに使ったプログラムは、MFIというヒントを計算して、売り買いの合図を出すために使われました。
  • 注意事項: このテストの結果は、過去のデータでどうだったかを見ただけなので、将来も同じようにうまくいくことを約束するものではありません。お金を増やすこと(投資)には、損をする可能性(リスク)もあります。やるときは、自分でよく考えて、自分の責任で行ってくださいね。

よくある質問

Q.MFIって何?

A.「マネー・フロー・インデックス」の略で、「お金の流れのヒント」という意味です。今、どれくらいの勢いでお金がビットコインに集まっているか、または逃げているかを見るための道具です。取引された量も計算に入っているので、市場の盛り上がり具合がわかります。

Q.「売られすぎ」「買われすぎ」ってどういうこと?

A.「売られすぎ」は、みんなが不安になって一斉に売ったせいで、本当の価値よりも値段が下がりすぎている状態のことです。「買われすぎ」は反対に、みんなが盛り上がって一斉に買ったせいで、値段が上がりすぎている状態を指します。

Q.この作戦は儲かるの?

A.残念ながら、今回のテストではうまくいきませんでした。勝てる回数が少なく、続ければ続けるほど損が大きくなってしまう結果でした。

Q.なんで儲からなかったの?

A.一番の理由は、値段が一方向にどんどん動き続ける「強い流れ」があるときには、反対をねらう作戦は負けやすいからです。値段が下がり始めたと思っても、もっともっと下がることがよくありました。また、取引の回数が多すぎたのも良くなかったかもしれません。

Q.この作戦を良くするにはどうしたらいい?

A.例えば、他のヒントと組み合わせて、もっと確実なチャンスだけをねらうようにします。また、「強い流れ」があるときはお休みするルールを作るのも良い方法です。こうやって工夫すれば、もっと良い作戦になる可能性があります。

Q.検証に使用した期間と時間足は?

A.5m足で検証しました。期間は記事内の概要をご確認ください。

Q.最終リターンと最大ドローダウンは?

A.最終リターンは-81.86%、最大DDは82.20%です。

Q.勝率やPFはどの程度?

A.勝率は37.96%、プロフィットファクターは0.47です。

Q.HODLとの比較結果は?

A.HODLは86.34%でした。記事内の比較表をご覧ください。

Q.手数料やスリッページは考慮済み?

A.はい。バックテスト設定の手数料・スリッページを損益に反映しています。

Q.市場環境はトレンド/レンジどちらに近かった?

A.期間中はトレンド優勢と推測されます。

Q.この戦略は初心者でも扱える?

A.基礎的な指標と検証環境の知識があれば扱えます。まずは少額・デモから。

Q.推奨のリスク管理は?

A.最大DDを踏まえた損切り・ポジションサイジングと、システム停止基準の設定を推奨します。

Q.将来の結果は期待できる?

A.過去の結果は将来を保証しません。市場環境やパラメータ適合性に大きく依存します。

Q.改良の方向性は?

A.トレンド・ボラティリティのフィルター併用、パラメータの再最適化、取引頻度の制御を検討してください。

著者情報