【なんで?】仮想通貨イーサリアムで試した作戦、お金が99%なくなっちゃった!
こんにちは!今回は、仮想通貨の「イーサリアム」で、「1日の値動きの勢い」を使った取引の作戦を310日間試してみました。結果は、なんと大切なお金が約99%もなくなってしまう大失敗でした。どうしてこんなことになってしまったのか、その理由と学んだことを、みんなに分かりやすくお話ししますね。
導入と前提条件
こんにちは!今回は、仮想通貨の「イーサリアム」で、「1日の値動きの勢い」を使った取引の作戦を310日間試してみました。結果は、なんと大切なお金が約99%もなくなってしまう大失敗でした。どうしてこんなことになってしまったのか、その理由と学んだことを、みんなに分かりやすくお話ししますね。
【検証】戦略のバックテスト概要
- 戦略名: Intraday Momentum Index を使用したトレンド追従戦略
- 対象銘柄: ETH/USDT
- 時間足: 5m
- 期間: 2024-10-18〜2025-08-25(310日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
Intraday Momentum Index の理論的背景
今回使った「Intraday Momentum Index(IMI)」という道具は、その日の値段が上がった勢いと下がった勢いを比べて、今の勢いを数字で教えてくれるものです。この数字が低すぎたら「売られすぎ」、高すぎたら「買われすぎ」と判断します。そして、値段の動きとこの道具の数字の動きがちぐはぐになった時も、取引のチャンスかもしれない、と考えて作戦を立てました。
具体的な売買ルール(今回の検証)
エントリー条件
- 道具の数字が「売られすぎ」のラインより下になった後、またラインの上に戻ってきたら買います。
- 値段は下がっているのに、道具の数字は上がっている、という不思議な状況になったら買います。これは「これから上がるかも!」というサインです。
エグジット条件
- 道具の数字が「買われすぎ」のラインより上になった後、またラインの下に戻ってきたら売ります。
- 値段は上がっているのに、道具の数字は下がっている、という不思議な状況になったら売ります。これは「これから下がるかも!」というサインです。
リスク管理
今回の失敗の大きな原因は、「大損しないための工夫」が足りなかったことです。例えば、「一回の取引で損してもいいのはここまで」とか、「全体のお金がこれ以上減ったら一旦ストップする」といった大事なルールを決めていませんでした。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでETH/USDTのOHLCVを取得して前処理
- 『Intraday Momentum Index』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 1121回 |
勝率 | 35.24% |
平均利益 | 0.6% |
平均損失 | -0.93% |
期待値 | -0.39% |
プロフィットファクター | 0.37 |
最大ドローダウン | 98.93% |
最終リターン | -98.92% |
シャープレシオ | -0.46 |
HODL(Buy&Hold) | 77.92% |
HODL戦略との比較
実装コード(Python)
"""
Intraday Momentum Index Trading Signal Generator
日中の価格動向から短期モメンタムを測定
"""
import pandas as pd
import numpy as np
def calculate_imi_signals(df: pd.DataFrame,
period: int = 14,
oversold: float = 30,
overbought: float = 70) -> pd.DataFrame:
"""
Intraday Momentum Index戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
period : int
IMI計算期間(デフォルト: 14)
oversold : float
売られ過ぎライン(デフォルト: 30)
overbought : float
買われ過ぎライン(デフォルト: 70)
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# 日中の価格変動
df['intraday_change'] = df['close'] - df['open']
# 上昇・下降の分離
df['gains'] = np.where(df['intraday_change'] > 0, df['intraday_change'], 0)
df['losses'] = np.where(df['intraday_change'] < 0, -df['intraday_change'], 0)
# 期間内の合計
df['sum_gains'] = df['gains'].rolling(window=period).sum()
df['sum_losses'] = df['losses'].rolling(window=period).sum()
# IMI計算
df['imi'] = 100 * df['sum_gains'] / (df['sum_gains'] + df['sum_losses'] + 0.0001)
# IMIの移動平均(スムージング)
df['imi_ma'] = df['imi'].rolling(window=3).mean()
# ダイバージェンス検出用
df['price_ma'] = df['close'].rolling(window=period).mean()
df['price_higher'] = df['close'] > df['close'].shift(period)
df['imi_lower'] = df['imi_ma'] < df['imi_ma'].shift(period)
df['bearish_div'] = df['price_higher'] & df['imi_lower']
df['price_lower'] = df['close'] < df['close'].shift(period)
df['imi_higher'] = df['imi_ma'] > df['imi_ma'].shift(period)
df['bullish_div'] = df['price_lower'] & df['imi_higher']
# シグナル生成
df['imi_prev'] = df['imi_ma'].shift(1)
df['is_buy'] = (
((df['imi_ma'] > oversold) & (df['imi_prev'] <= oversold)) |
(df['bullish_div'] & (df['imi_ma'] < 50))
) & df['imi_ma'].notna()
df['is_sell'] = (
((df['imi_ma'] < overbought) & (df['imi_prev'] >= overbought)) |
(df['bearish_div'] & (df['imi_ma'] > 50))
) & df['imi_ma'].notna()
# 不要カラム削除
df.drop(['intraday_change', 'gains', 'losses', 'sum_gains', 'sum_losses',
'price_ma', 'price_higher', 'imi_lower', 'bearish_div',
'price_lower', 'imi_higher', 'bullish_div', 'imi_prev'], axis=1, inplace=True, errors='ignore')
return df
なぜこの結果になったのか(3つの理由)
- 1今回試したイーサリアムの短い時間での値動きは、一度動き出すとなかなか止まらない特徴があったのかもしれません。だから、「みんなと逆の動き」を狙う作戦が、ことごとく裏目に出てしまいました。
- 2勝つ確率は約35%と低かったのですが、それ以上に、一回勝った時のもうけよりも、一回負けた時の損がとても大きかったんです。だから、取引すればするほど、お金が減ってしまいました。
- 3もしこの作戦を使わずに、ただイーサリアムを「ずっと持っているだけ」にしていた方が、結果的にお金は減りませんでした。つまり、こまめに取引したことが、逆に損を大きくしてしまったようです。
この結果から学べる3つの教訓
- 1「これは良さそう!」と思った作戦でも、実際にやってみないと本当にうまくいくかは分からない、ということを学びました。
- 2取引で勝つ確率も大事ですが、「勝った時にいくら増えて、負けた時にいくら減るのか」という、もうけと損のバランスがもっと大事だということが分かりました。
- 3「仮想通貨は、ずっと持っていれば大丈夫」とよく言われますが、それがいつも正しいとは限らないし、売ったり買ったりした方がいい時も、しない方がいい時もあるんだと勉強になりました。
リスク管理の具体的手法
取引量の決め方
1回の取引に使うお金は、持っているお金のほんの少し(例えば100分の1とか)にすることが大切です。そうすれば、もし負けが続いても、すぐにお金が全部なくなることはありません。
損失が大きくなったときの対処法
もしお金が、一番多かった時からある程度(例えば10%)減ってしまったら、一度取引をお休みして、冷静になる時間を作ることが重要です。焦って取引すると、もっと失敗しやすくなります。
資金管理の方法
最初に「全体でこれ以上は絶対に損しない」という金額を決めておくことが大切です。そのルールをしっかり守ることで、取り返しのつかない失敗を防ぐことができます。
改良案の具体的提案
- 今度は「流れに乗る」作戦も試してみたいです。つまり、値段が上がっている時に一緒に買って、下がっている時に一緒に売る方法です。
- 取引する仮想通貨の種類や、見るグラフの時間(5分ごと、1時間ごとなど)を変えて、この作戦がうまくいく場所がないか探してみたいです。
- 損が大きくなる前に「ごめんなさい!」とあきらめるルール(損切り)を、もっと厳しく決めることも考えています。
実用性の向上(運用上の注意)
- この作戦を試すときは、いきなり自分のお金を使わずに、まずは練習用のお金で試せる「デモトレード」や、昔のデータでうまくいくか調べる「バックテスト」をしてみましょう。
- 取引する仮想通貨や、見るグラフの時間が、その作戦に合っているか、色々な組み合わせで試してみることが大切です。
- コンピューターが自動でやってくれるプログラムはとても便利ですが、そのプログラムが何をしているのか、自分でちゃんと理解してから使いましょう。そうしないと、今回のように損するプログラムを使い続けてしまうかもしれません。
検証の透明性と信頼性
- データの出所: このお話は、コンピューターで自動取引を試したときの結果のデータをもとにしています。
- 検証のやり方: コンピューターが出してくれた取引の回数や勝率などの記録を調べて、分析しました。
- コード: この作戦を実行したコンピュータープログラムは、見ることができます。
- 注意事項: これは昔のデータで試した結果なので、未来も同じようにお金が増えたり減ったりすることを約束するものではありません。お金に関することは、自分の判断と責任でお願いします。