シェア:

『価格の勢い』で流れを見つける作戦!でも今回は…?

この作戦は、「AVAX/USDT」という仮想通貨の5分ごとの細かい値動きを見て、値段がぐーんと伸びそうな瞬間を見つけようとするものです。でも、残念ながら今回の実験ではうまくいきませんでした。なぜ失敗しちゃったのか、一緒に見ていきましょう!

取引数
1798
勝率
26.08%
最終リターン
-99.93%
最大DD
99.94%

導入と前提条件

この作戦は、「AVAX/USDT」という仮想通貨の5分ごとの細かい値動きを見て、値段がぐーんと伸びそうな瞬間を見つけようとするものです。でも、残念ながら今回の実験ではうまくいきませんでした。なぜ失敗しちゃったのか、一緒に見ていきましょう!

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

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

Range Expansion Index の理論的背景

この「REI」というものさしは、過去の値段の動き方を調べて作られています。数字がぐんと大きくなると、「お、今すごい勢いで動いているぞ!」ってことがわかります。この数字が、ある決められたライン(例えばプラス60やマイナス60)を越えたり、ゼロのラインをまたいだりした時に、「今がチャンスかも!」と判断するルールです。でも、これはあくまで勢いを見ているだけなので、この合図が出ても、必ずもうかるわけではないんです。

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

エントリー条件

  • REIの数字が、すごく低いライン(-60)より下まで下がってから、またそのラインを上に戻ってきたとき。これは「みんなが売りすぎたけど、そろそろ落ち着いてきたかな?」という買う合図です。
  • REIの数字がゼロのあたりで、昨日よりも上がってきたとき。これは「これから勢いがついてきそうだぞ!」という買う合図です。

エグジット条件

  • REIの数字が、すごく高いライン(+60)を越えてから、またそのラインを下に戻ってきたとき。これは「みんな買いすぎたから、そろそろ終わりかな?」という売る合図です。
  • REIの数字がプラスの状態で、昨日よりも下がってきたとき。これは「勢いがなくなってきたな」という売る合図です。

リスク管理

大きな損をしないように、一度に使うお金の量を少なくしたり、「もしこれだけ損しちゃったら、今回はあきらめよう」というストップラインを決めておくことが大事です。今回の実験では、このルールが甘かったので、とても大きな損につながってしまいました。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数1798回
勝率26.08%
平均利益0.85%
平均損失-0.84%
期待値-0.4%
プロフィットファクター0.31
最大ドローダウン99.94%
最終リターン-99.93%
シャープレシオ-0.67
HODL(Buy&Hold)-6.76%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Range Expansion Index Trading Signal Generator
価格レンジの拡大を検出してトレンド開始を捉える
"""
import pandas as pd
import numpy as np


def calculate_rei_signals(df: pd.DataFrame,
                         period: int = 8,
                         smooth: int = 5) -> pd.DataFrame:
    """
    Range Expansion Index戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        REI計算期間(デフォルト: 8)
    smooth : int
        平滑化期間(デフォルト: 5)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # 2期間前との価格比較
    df['high_2'] = df['high'].shift(2)
    df['low_2'] = df['low'].shift(2)
    
    # 条件付き価格変化
    df['cond_high'] = np.where(
        (df['high'] >= df['low_2']) | (df['high'] >= df['high_2']),
        df['high'] - df['high_2'],
        0
    )
    df['cond_low'] = np.where(
        (df['low'] <= df['high_2']) | (df['low'] <= df['low_2']),
        df['low_2'] - df['low'],
        0
    )
    
    # REI成分の計算
    df['rei_comp'] = df['cond_high'] + df['cond_low']
    
    # N期間のREI
    df['rei_sum'] = df['rei_comp'].rolling(window=period).sum()
    
    # 標準化のための価格レンジ
    df['price_range'] = df['high'].rolling(window=period).max() - df['low'].rolling(window=period).min()
    
    # REI計算
    df['rei_raw'] = (df['rei_sum'] / (df['price_range'] + 0.0001)) * 100
    
    # スムージング
    df['rei'] = df['rei_raw'].ewm(span=smooth, adjust=False).mean()
    
    # REIの移動平均
    df['rei_ma'] = df['rei'].rolling(window=period).mean()
    
    # エクストリームレベル
    df['rei_upper'] = 60
    df['rei_lower'] = -60
    
    # シグナル生成
    df['rei_prev'] = df['rei'].shift(1)
    df['is_buy'] = (
        ((df['rei'] > df['rei_lower']) & (df['rei_prev'] <= df['rei_lower'])) |  # 売られ過ぎからの反発
        ((df['rei'] > 0) & (df['rei_prev'] <= 0) & (np.abs(df['rei']) < 40))  # ゼロラインクロス(非エクストリーム)
    ) & df['rei'].notna()
    df['is_sell'] = (
        ((df['rei'] < df['rei_upper']) & (df['rei_prev'] >= df['rei_upper'])) |  # 買われ過ぎからの反落
        ((df['rei'] < 0) & (df['rei_prev'] >= 0) & (np.abs(df['rei']) < 40))  # ゼロラインクロス(非エクストリーム)
    ) & df['rei'].notna()
    
    # 不要カラム削除
    df.drop(['high_2', 'low_2', 'cond_high', 'cond_low', 'rei_comp', 'rei_sum',
             'price_range', 'rei_raw', 'rei_ma', 'rei_upper', 'rei_lower', 'rei_prev'], 
            axis=1, inplace=True, errors='ignore')
    
    return df

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

  1. 1勝つ確率がとっても低かったんです。勝率は約26%でした。つまり、4回挑戦して1回勝てるかどうか、というくらいです。ほとんどが負けてしまうので、もうけを出すのが難しかったんですね。
  2. 21回やるごとに、平均してちょっぴりずつ損をしてしまう計算でした。これを何回も繰り返したので、損が雪だるま式に大きくなってしまったんです。
  3. 3もうけたお金と、損したお金を比べると、損したお金の方が3倍以上も大きかったんです。だから、最終的には持っていたお金のほとんど(-99.93%)を失うという、とても悲しい結果になってしまいました。

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

  1. 1「勢いがあるぞ!」という合図だけを信じるのは危ない、ということがわかりました。値段の動きは、そんなに単純じゃないんですね。
  2. 2「買いすぎ」や「売りすぎ」の合図が出ても、値段が必ず反対に動くわけじゃないんです。むしろ、そのままもっと上がったり、もっと下がったりすることもありました。
  3. 3この作戦ひとつだけでは、世の中全体の大きな動きや、突然のびっくりするような出来事には対応できない、ということがわかりました。

リスク管理の具体的手法

取引量の決め方

一度に使うお金の量を決めること。例えば、おこづかいが1000円あったら、一回のゲームに使うのは10円だけ、みたいに決めるんです。そうすれば、もし負けても、ダメージは小さいですよね。

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

損が大きくなったら一度ストップすること。もし、決めていた以上にお金が減ってしまったら、一旦全部お休みします。そして「どうして負けちゃったんだろう?」って作戦を考え直す時間が必要です。今回は、これができなくてほとんどのお金を失ってしまいました。

資金管理の方法

お金全体をうまく管理すること。勝って増えたお金は、すぐに全部使わずに、一部は貯金箱に入れておきます。もし負けてしまったら、その貯金で助けてもらうんです。逆に調子がいい時は、少しだけ使うお金を増やして、もっと大きな勝ちを狙うこともできます。でも、今回の作戦では、とても慎重にやる必要がありました。

改良案の具体的提案

  • 他の「ものさし」と組み合わせること。例えば、値段の大きな流れが上向きか下向きかを確認する道具と一緒に使うと、もっと成功率が上がるかもしれません。
  • 「買いすぎ」「売りすぎ」のラインを、そのときの状況に合わせて変えること。いつも同じラインだと、うまくいかないことがあるからです。
  • 「損切り」のルールをもっと厳しくすること。「これ以上損したら絶対やめる!」というラインを早めに設定して、大きな負けを防ぐことが大切です。

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

  • この作戦は、今回の実験ではうまくいきませんでした。なので、このまま本物のお金で試すのは、絶対にやめましょう。
  • もしどうしても試してみたいなら、まずはゲーム内のお金のような、なくなっても大丈夫なお金で練習(デモ取引)してみましょう。それで、本当にうまくいくか確かめることが大事です。
  • この作戦が、どんなときに強くて、どんなときに弱いのかを知ることが大切です。例えば、値段が静かに動いている時と、嵐のように激しく動いている時、どっちが得意なのかを見極める必要があります。

検証の透明性と信頼性

  • データの出所: この説明は、もらった実験データと、作戦のプログラムを元に作っています。
  • 検証のやり方: どうやって確認したかというと、もらったプログラムを実際に動かしてみて、出てきた実験結果(取引の回数や勝率など)をちゃんと確かめました。
  • コード: 作戦の詳しい計算方法や、売ったり買ったりする合図を出すためのプログラム(Pythonコード)も見ることができます。
  • 注意事項: 注意してほしいこと。このお話は、あくまで今回の実験結果を説明したものです。「こうすれば未来は絶対もうかる!」という約束はできません。お金を使うときは、最後は自分でよく考えて決めてくださいね。

よくある質問

Q.「価格の勢い」って、どうやってわかるの?

A.値段が短い時間で、ビュン!と上がったり下がったりする、そのパワフルさを計算して数字にしたものが「勢い」です。この作戦では「REI」という数字で見ています。

Q.「買われすぎ」「売られすぎ」って、どういう意味?

A.みんなが「すごい!」ってたくさん買いすぎて、値段が上がりすぎちゃった状態が「買われすぎ」です。そろそろ値段が下がるかも、と考える人が増えます。逆に、みんなが「もうダメだ!」ってたくさん売りすぎて、値段が下がりすぎちゃった状態が「売られすぎ」です。

Q.この戦略は、いつ使うのがいいの?

A.もともとは、値段が大きく動き出す「流れの始まり」を見つけるために考えられた作戦です。でも、今回の実験結果を見ると、いつでもうまくいくわけではない、ということがわかりました。

Q.「最大DD」って、何?

A.「最大ドローダウン」のことです。おこづかいが一番減っちゃった時、スタートの時からどれくらい減ったか、という一番大きなへこみのことです。今回は99.94%なので、持っていたお金がほとんどゼロになりかけた、ということです。

Q.この戦略で利益を出すには、どうしたらいい?

A.このまま使うのは難しいです。でも、他の作戦と組み合わせたり、「ここまで損したらやめる」というルールをもっと厳しくしたり、一度に使うお金の量を調整したりすれば、もっとうまくいくようになるかもしれません。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

A.期間中はレンジ・下落優勢と推測されます。

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報