シェア:

お金の流れを読んでみよう!仮想通貨の売買チャレンジ「チャイキン・マネーフロー」

この作戦は、仮想通貨(今回はイーサリアム)の「お金がどっちに流れているか」をヒントに、いつ買っていつ売るかを見つける方法です。5分ごとという短い時間で、たくさん売買を試してみました。でも残念ながら、今回はあまり良い結果が出ませんでした。どうしてうまくいかなかったのか、この失敗から何を学べるのかを一緒に見ていきましょう!

取引数
2128
勝率
21.99%
最終リターン
-99.96%
最大DD
99.96%

導入と前提条件

この作戦は、仮想通貨(今回はイーサリアム)の「お金がどっちに流れているか」をヒントに、いつ買っていつ売るかを見つける方法です。5分ごとという短い時間で、たくさん売買を試してみました。でも残念ながら、今回はあまり良い結果が出ませんでした。どうしてうまくいかなかったのか、この失敗から何を学べるのかを一緒に見ていきましょう!

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

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

Chaikin Money Flow の理論的背景

この作戦の根っこにある考え方は、「人気のある仮想通貨には、みんなのお金が集まってくる」「人気がなくなると、お金は逃げていく」という、とてもシンプルなものです。CMFは、このお金の流れを「取引された量」という情報を使って、もっと詳しく見ようとします。具体的には、その日の最後の値段が、一日の値動きの中で高かったのか低かったのかを見て「その日のお金の勢い」を考えます。そして、その勢いと、実際に取引された量をかけ合わせます。これを20日分くらい集計して、お金の流れが今どちらに向いているかを数字で表してくれるんです。CMFの数字が大きくプラスなら「お金が集まってきているぞ!」、大きくマイナスなら「お金が逃げているぞ!」と判断するわけです。

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

エントリー条件

  • お金の流れ(CMF)がプラスの目安(0.05)を超えて、さらに勢いが強くなったとき

エグジット条件

  • お金の流れ(CMF)がマイナスの目安(-0.05)を下回って、さらに勢いが弱くなったとき

リスク管理

この作戦では、一番大きく損した時に、もとでのお金の99.96%を失ってしまうという、とても危険な結果になりました。これは、売ったり買ったりした回数が2128回とすごく多いのに、勝てたのが約22%と少なかったからです。大きな損を防ぐためには、「1回の取引で損しても良いのは、もとでのお金の1%まで」のように、あらかじめルールを決めておくことが大切です。今回の実験では、そういった「損を小さくする工夫」が足りなかったようです。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数2128回
勝率21.99%
平均利益1.02%
平均損失-0.76%
期待値-0.37%
プロフィットファクター0.33
最大ドローダウン99.96%
最終リターン-99.96%
シャープレシオ-0.82
HODL(Buy&Hold)93.83%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/usr/bin/env python3
"""
Chaikin Money Flow (CMF)戦略
出来高加重の資金流入・流出を測定
"""
import pandas as pd
import numpy as np


def calculate_cmf_signals(df: pd.DataFrame, cmf_period: int = 20, 
                         threshold: float = 0.05) -> pd.DataFrame:
    """
    Chaikin Money Flowシグナルを生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    cmf_period : int
        CMF計算期間(デフォルト: 20)
    threshold : float
        シグナル閾値(デフォルト: 0.05)
    
    Returns:
    --------
    pd.DataFrame
        シグナル列が追加されたDataFrame
    """
    df = df.copy()
    
    # Money Flow Multiplier計算
    df['mf_multiplier'] = ((df['close'] - df['low']) - (df['high'] - df['close'])) / (df['high'] - df['low'])
    df['mf_multiplier'] = df['mf_multiplier'].fillna(0)
    
    # Money Flow Volume
    df['mf_volume'] = df['mf_multiplier'] * df['volume']
    
    # Chaikin Money Flow
    df['cmf'] = (
        df['mf_volume'].rolling(window=cmf_period).sum() / 
        df['volume'].rolling(window=cmf_period).sum()
    )
    
    # CMFの変化率
    df['cmf_change'] = df['cmf'] - df['cmf'].shift(1)
    
    # シグナル生成
    df['is_buy'] = (
        (df['cmf'] > threshold) &  # CMFが正の閾値を超える
        (df['cmf'].shift(1) <= threshold) &  # 前期間は閾値以下
        (df['cmf_change'] > 0)  # CMFが上昇中
    )
    
    df['is_sell'] = (
        (df['cmf'] < -threshold) &  # CMFが負の閾値を下回る
        (df['cmf'].shift(1) >= -threshold) &  # 前期間は閾値以上
        (df['cmf_change'] < 0)  # CMFが下降中
    )
    
    # NaN値をFalseに置換
    df['is_buy'] = df['is_buy'].fillna(False)
    df['is_sell'] = df['is_sell'].fillna(False)
    
    print(f"Chaikin Money Flow: 期間={cmf_period}, 閾値={threshold}")
    print(f"買いシグナル数: {df['is_buy'].sum()}")
    print(f"売りシグナル数: {df['is_sell'].sum()}")
    
    return df

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

  1. 1勝った割合が約22%ととても低く、ほとんどの取引で負けてしまったため、どんどん損がふくらんでしまいました。
  2. 2取引の回数が2128回と多すぎたのに、一回ごとの儲けが小さく、取引にかかる手数料を考えると赤字になってしまいました。
  3. 3お金の流れを見るための「目安の数字」や「計算に使う期間」の設定が、今回のイーサリアムの5分ごとの値動きに合っていなかったのかもしれません。

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

  1. 1どんなに良さそうに見える作戦でも、実際に試してみると、予想と違う結果になることがあると分かりました。
  2. 2勝つ回数が少なくても、一回で大きく勝てればプラスになりますが、この作戦ではそれもできませんでした。
  3. 3「期待値(1回の取引で平均いくら儲かるか)」や「PF(儲けと損のバランス)」といった、取引全体の成績を見る数字も大事だと学びました。今回の作戦では、どちらもマイナスでした。

リスク管理の具体的手法

取引量の決め方

1回の取引で、自分が持っているお金のうち、いくらまでなら損しても大丈夫かを決めておくことです。例えば、10万円持っていたら、「1回の負けは1000円まで」というようにルールを決めます。

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

もし損が続いて大きくなってしまったら、一度取引をお休みするルールを決めておくことです。今回の実験では、もとでのお金をほとんど全部失う結果になったので、こういうルールがとても大切だと分かります。

資金管理の方法

自分が持っているお金全体を、どうやって投資に使っていくか計画を立てることです。例えば、「投資に使うのは持っているお金の半分だけにする」など、生活に困らない範囲で、うまくお金を管理することが大事です。

改良案の具体的提案

  • お金の流れを見るための「目安の数字」や「計算に使う期間」を色々な数字に変えて、一番うまくいく設定を探してみる。
  • お金の流れ(CMF)だけでなく、値段の勢いを見る道具など、別のものと組み合わせて、もっと確実なタイミングを探すようにする。
  • 「1回の取引で失うお金はここまで」という上限を決めるなど、損を小さくするためのルールをもっと厳しくする。

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

  • この作戦は今回はうまくいきませんでしたが、設定を変えたり、他の方法と組み合わせたりすれば、将来うまくいくヒントになるかもしれません。
  • もし自分で試すなら、必ず無くなってもいい少額のお金で試したり、過去のデータでうまくいくか何度もチェックしたりすることが大切です。
  • 「期待値」がマイナスということは、続ければ続けるほど損をする可能性が高いということです。そういう作戦は、続けるべきか慎重に考えましょう。

検証の透明性と信頼性

  • データの出所: この実験で使った値段や取引量のデータは、実際の仮想通貨取引所が公開している情報をもとにしています。
  • 検証のやり方: Pythonというプログラミング言語を使って、過去のイーサリアムの5分ごとのデータで、この作戦がどれくらいうまくいくかを計算して確かめました。
  • コード: この実験で使ったプログラムは公開されています。なので、自分で同じ実験をしたり、もっと良くするための改造をしたりすることもできます。
  • 注意事項: このお話は、あくまで昔のデータで試した結果です。未来も同じように儲かることを保証するものではありません。投資は、自分の判断と責任で行うものです。特に、この作戦は大きな損を出したので、そのまま使うのはとても危険です。

よくある質問

Q.CMFって、どうやって作られているの?

A.簡単に言うと、「その日の値段の勢い」と「取引された量」を組み合わせて作られます。「勢い」は、その日の最後の値段が、一日の値動きの中で高かったか低かったかで見ます。これに、どれだけたくさん取引されたかをかけ算して、お金の流れの強さを数字にしています。

Q.「目安の数字」って何のためにあるの?

A.「買う」か「売る」かを決めるためのボーダーラインです。CMFの数字がこの線(今回はプラスの0.05)を元気よく超えたら「買いのチャンスかも!」、マイナスの線(今回は-0.05)を元気に下回ったら「売りのチャンスかも!」と判断するための目印です。

Q.「期待値」や「PF」って、もっと分かりやすく言うと?

A.「期待値」は、「この取引を1回やると、平均していくら儲かるかな?」という予想金額です。マイナスだと、やればやるほど損する可能性が高いということです。「PF」は、勝った時の合計金額と、負けた時の合計金額のバランスです。1より大きいと勝ち越していますが、今回は1よりずっと小さく、負けが大きく上回ったことを示しています。

Q.HODL(ホドル)って何?

A.HODL(ホドル)は、仮想通貨を買ったあと、売らずに「ずーっと持っておく」ことです。今回の実験では、ただ持っているだけ(HODL)だったら約94%も儲かっていたのに、この作戦を使ったら約100%損してしまいました。つまり、何もしない方がずっと良かった、ということです。

Q.じゃあ、この作戦はもう使えないの?

A.このままの設定で使うのは、とても危険なのでおすすめできません。でも、今回の失敗をヒントに、設定を変えたり、他の道具と組み合わせたり、損を小さくするルールをしっかり作ったりすれば、もっと良い作戦に生まれ変わる可能性はあります。もし試すなら、必ず失っても大丈夫な少額のお金で、慎重にやってみてくださいね。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報