値段の動きやすさでチャレンジ!コイン「XRP」で試した「EOM」作戦
この作戦は、「XRP」というインターネット上のお金の1時間ごとの値段グラフを使って、値段がどれだけ動きやすいかをはかる「Ease of Movement(EOM)」という道具を使うものです。2025年1月15日から8月25日までの約7ヶ月間、555回取引をしてみて、どうだったかを一緒に見ていきましょう。
導入と前提条件
この作戦は、「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)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでXRP/USDTのOHLCVを取得して前処理
- 『Ease of Movement』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 555回 |
勝率 | 28.83% |
平均利益 | 1.79% |
平均損失 | -1.29% |
期待値 | -0.4% |
プロフィットファクター | 0.54 |
最大ドローダウン | 91.1% |
最終リターン | -90.45% |
シャープレシオ | -0.96 |
HODL(Buy&Hold) | 4.41% |
HODL戦略との比較
実装コード(Python)
"""
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勝った割合(勝率)が約28.8%と低かったです。これは、4回取引したら3回は負けてしまうくらいなので、もうけを出すのが難しかったと考えられます。
- 21回取引するごとに、平均して少しずつ損をしてしまう傾向があったみたいです。そのため、最終的なもうけは大きなマイナス(-90.45%)になってしまいました。
- 3もうけの合計と損の合計を比べると、損の合計のほうがずっと大きかったようです。これを表すPFという数字が0.54で、1よりずっと小さいことからもわかります。
この結果から学べる3つの教訓
- 1「Ease of Movement」という道具だけでは、市場の本当の勢いをいつも正しくつかむのは難しい、ということがわかりました。
- 2勝つ割合が低くても、1回で大きく勝てれば全体でプラスになることもあります。でも、この作戦ではそうはなりませんでした。
- 3取引の回数が多くなると、1回ごとの小さな損が積み重なって、最終的に大きなマイナスになりやすい、ということを学びました。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金は、自分が持っているお金全部のうち、ほんの少し(例えば1%とか2%)にすることが基本です。そうすれば、もし負けても全体のお金へのダメージを小さくできます。
損失が大きくなったときの対処法
もし損がどんどん大きくなってしまったら、一度取引をお休みするのが大事です。そして、なぜ損しているのかを冷静に考えましょう。決めた額以上に損がふくらんだら、無理に続けずに、一度市場から離れる勇気も必要です。
資金管理の方法
持っているお金全体をどう使うか、計画を立てることです。「この作戦にはこれだけのお金を使い、もし負けが続いたらこの作戦は一旦やめる」というようなルールを決めておくと、全部のお金をなくしてしまう危険を減らせます。
改良案の具体的提案
- 「EOM」だけでなく、他の人気の道具(例えば、移動平均線やRSIなど)も一緒に使って、もっと確かなタイミングで売り買いできるように工夫します。
- 大きな損をしないように、「ここまで損したら売る」という「損切り」のルールをもっと厳しくすることを考えます。
- 1回に取引するお金の量を調整するなど、お金の管理の仕方を見直して、大きな失敗を防ぐようにします。
実用性の向上(運用上の注意)
- この結果は、あくまで昔のデータで試したものです。未来も同じようにもうかることを約束するものではない、ということを覚えておいてくださいね。
- 取引するコインの種類(今回はXRP/USDT)や、見るグラフの時間(今回は1時間)を変えると、結果も変わるかもしれません。色々試してみるのも面白いですよ。
- この作戦で使った「Ease of Movement」という道具の仕組みを、もっと自分で調べてみると、さらに上手に使えるようになるかもしれません。
検証の透明性と信頼性
- データの出所: このお試しで使ったデータは、仮想通貨の取引所が記録している実際の値段のデータです。
- 検証のやり方: 「もし過去にこのルールで取引していたらどうなったか」をコンピューターで試してみて(バックテスト)、結果を調べました。
- コード: この作戦を計算するためのプログラム(Pythonコード)は、見ることができるようになっています。
- 注意事項: このお話は、投資をおすすめするためのものではありません。投資は、自分のお金が減ってしまう可能性もあります。自分でよく考えて、自分の責任でチャレンジしてください。