シェア:

値段の動きやすさでチャレンジ!コイン「XRP」で試した「EOM」作戦

この作戦は、「XRP」というインターネット上のお金の1時間ごとの値段グラフを使って、値段がどれだけ動きやすいかをはかる「Ease of Movement(EOM)」という道具を使うものです。2025年1月15日から8月25日までの約7ヶ月間、555回取引をしてみて、どうだったかを一緒に見ていきましょう。

取引数
555
勝率
28.83%
最終リターン
-90.45%
最大DD
91.10%

導入と前提条件

この作戦は、「XRP」というインターネット上のお金の1時間ごとの値段グラフを使って、値段がどれだけ動きやすいかをはかる「Ease of Movement(EOM)」という道具を使うものです。2025年1月15日から8月25日までの約7ヶ月間、555回取引をしてみて、どうだったかを一緒に見ていきましょう。

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

  • 戦略名: Ease of Movement を使用したトレンド追従戦略
  • 対象銘柄: XRP/USDT
  • 時間足: 1h
  • 期間: 2025-01-15〜2025-08-25(221日間)
  • 初期資金: $10,000
  • 手数料・スリッページ: 0.1% / 0.1%
  • 取引所: binance

Ease of Movement の理論的背景

この作戦は、「値段の勢い」が大事だという考えにもとづいています。たくさん売り買いされていて、値段の動きが小さいときに値段が動いたら、それは「値段が動きやすい状態」だと考えます。逆に、あまり売り買いされていないのに値段が大きく動いたときは、「値段が動きにくい状態」かもしれません。「EOM」は、この「動きやすさ」を数字で表してくれます。数字がプラスになったら買い、マイナスになったら売る、というルールでチャンスを探します。EOMの勢いを表す棒グラフが、ゼロのラインを上に抜けたり下に抜けたりするタイミングも、売り買いのしるしとして使います。

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

エントリー条件

  • 「EOM」の数字が、マイナスからプラスに変わったとき(上がる力が強くなったサインです!)。
  • 「EOM」の数字がプラスになったとき(上がる力が強いと判断します)。

エグジット条件

  • 「EOM」の数字が、プラスからマイナスに変わったとき(下がる力が強くなったサインです!)。
  • 「EOM」の数字がマイナスになったとき(下がる力が強いと判断します)。

リスク管理

この作戦では、一番うまくいかなかったときに、持っていたお金が91.1%も減ってしまうことがありました。これはとても大きな損です。大きな損をしないためには、1回の取引で使うお金の額を決めたり、「ここまで損したら、あきらめて売る」というルール(損切り)を決めておくことがとても大切になります。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数555回
勝率28.83%
平均利益1.79%
平均損失-1.29%
期待値-0.4%
プロフィットファクター0.54
最大ドローダウン91.1%
最終リターン-90.45%
シャープレシオ-0.96
HODL(Buy&Hold)4.41%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Ease of Movement Trading Signal Generator
価格変動の容易さを測定する指標
"""
import pandas as pd
import numpy as np


def calculate_eom_signals(df: pd.DataFrame,
                         period: int = 14,
                         signal_period: int = 9) -> pd.DataFrame:
    """
    Ease of Movement戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        EOM計算期間(デフォルト: 14)
    signal_period : int
        シグナルライン期間(デフォルト: 9)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # Distance Moved
    df['mid_point'] = (df['high'] + df['low']) / 2
    df['mid_move'] = df['mid_point'] - df['mid_point'].shift(1)
    
    # EMV Box Ratio
    df['box_height'] = df['high'] - df['low']
    scale = 1000000  # スケーリング係数
    df['box_ratio'] = (scale / df['volume']) / (df['box_height'] + 0.0001)
    
    # 1-period EMV
    df['emv_1'] = df['mid_move'] * df['box_ratio']
    
    # N-period EMV(移動平均)
    df['emv'] = df['emv_1'].rolling(window=period).mean()
    
    # シグナルライン
    df['emv_signal'] = df['emv'].rolling(window=signal_period).mean()
    
    # EMVヒストグラム
    df['emv_hist'] = df['emv'] - df['emv_signal']
    
    # ゼロラインクロス
    df['emv_prev'] = df['emv'].shift(1)
    df['zero_cross_up'] = (df['emv'] > 0) & (df['emv_prev'] <= 0)
    df['zero_cross_down'] = (df['emv'] < 0) & (df['emv_prev'] >= 0)
    
    # シグナル生成
    df['hist_prev'] = df['emv_hist'].shift(1)
    df['is_buy'] = (
        ((df['emv_hist'] > 0) & (df['hist_prev'] <= 0)) |
        df['zero_cross_up']
    ) & df['emv'].notna()
    df['is_sell'] = (
        ((df['emv_hist'] < 0) & (df['hist_prev'] >= 0)) |
        df['zero_cross_down']
    ) & df['emv'].notna()
    
    # 不要カラム削除
    df.drop(['mid_point', 'mid_move', 'box_height', 'box_ratio', 'emv_1',
             'emv_prev', 'zero_cross_up', 'zero_cross_down', 'hist_prev'], axis=1, inplace=True, errors='ignore')
    
    return df

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

  1. 1勝った割合(勝率)が約28.8%と低かったです。これは、4回取引したら3回は負けてしまうくらいなので、もうけを出すのが難しかったと考えられます。
  2. 21回取引するごとに、平均して少しずつ損をしてしまう傾向があったみたいです。そのため、最終的なもうけは大きなマイナス(-90.45%)になってしまいました。
  3. 3もうけの合計と損の合計を比べると、損の合計のほうがずっと大きかったようです。これを表すPFという数字が0.54で、1よりずっと小さいことからもわかります。

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

  1. 1「Ease of Movement」という道具だけでは、市場の本当の勢いをいつも正しくつかむのは難しい、ということがわかりました。
  2. 2勝つ割合が低くても、1回で大きく勝てれば全体でプラスになることもあります。でも、この作戦ではそうはなりませんでした。
  3. 3取引の回数が多くなると、1回ごとの小さな損が積み重なって、最終的に大きなマイナスになりやすい、ということを学びました。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金は、自分が持っているお金全部のうち、ほんの少し(例えば1%とか2%)にすることが基本です。そうすれば、もし負けても全体のお金へのダメージを小さくできます。

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

もし損がどんどん大きくなってしまったら、一度取引をお休みするのが大事です。そして、なぜ損しているのかを冷静に考えましょう。決めた額以上に損がふくらんだら、無理に続けずに、一度市場から離れる勇気も必要です。

資金管理の方法

持っているお金全体をどう使うか、計画を立てることです。「この作戦にはこれだけのお金を使い、もし負けが続いたらこの作戦は一旦やめる」というようなルールを決めておくと、全部のお金をなくしてしまう危険を減らせます。

改良案の具体的提案

  • 「EOM」だけでなく、他の人気の道具(例えば、移動平均線やRSIなど)も一緒に使って、もっと確かなタイミングで売り買いできるように工夫します。
  • 大きな損をしないように、「ここまで損したら売る」という「損切り」のルールをもっと厳しくすることを考えます。
  • 1回に取引するお金の量を調整するなど、お金の管理の仕方を見直して、大きな失敗を防ぐようにします。

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

  • この結果は、あくまで昔のデータで試したものです。未来も同じようにもうかることを約束するものではない、ということを覚えておいてくださいね。
  • 取引するコインの種類(今回はXRP/USDT)や、見るグラフの時間(今回は1時間)を変えると、結果も変わるかもしれません。色々試してみるのも面白いですよ。
  • この作戦で使った「Ease of Movement」という道具の仕組みを、もっと自分で調べてみると、さらに上手に使えるようになるかもしれません。

検証の透明性と信頼性

  • データの出所: このお試しで使ったデータは、仮想通貨の取引所が記録している実際の値段のデータです。
  • 検証のやり方: 「もし過去にこのルールで取引していたらどうなったか」をコンピューターで試してみて(バックテスト)、結果を調べました。
  • コード: この作戦を計算するためのプログラム(Pythonコード)は、見ることができるようになっています。
  • 注意事項: このお話は、投資をおすすめするためのものではありません。投資は、自分のお金が減ってしまう可能性もあります。自分でよく考えて、自分の責任でチャレンジしてください。

よくある質問

Q.「Ease of Movement」って、どういう意味?

A.「値段の動きやすさ」っていう意味だよ。売り買いの量と値段の動きを比べて、どれだけスムーズに値段が動いているかをはかる道具なんだ。

Q.「XRP/USDT」って何?

A.「XRP」っていうコインと、「USDT」っていうアメリカのドルと同じくらいの価値になるように作られたコインのペアのことだよ。この2つを交換するときの値段の動きを見ているんだ。

Q.「1h」ってどういう意味?

A.「1時間足(いちじかんあし)」のことだよ。グラフの1本の棒が、1時間分の値段の動きを表しているんだ。

Q.「勝率28.83%」って、かなり低いんじゃない?

A.そうだね。10回取引したら、勝つのは3回もないくらいだから、かなり低いと言えるね。だから、もうけを出すのが難しかったんだ。

Q.「最大DD 91.1%」って、ほとんどのお金がなくなっちゃうの?

A.うん、これはすごく大きな数字だよね。一番調子が悪かったときに、持っていたお金が、一番多かったときと比べて、最大で91.1%も減ってしまった、っていうことなんだ。つまり、一時的にほとんどのお金がなくなってしまったような状態になったってことだよ。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報