シェア:

ビットコインの値段が大きく動いた!元に戻る力を利用した取引の作戦

この作戦は、ビットコインの値段が、その日の平均的な値段から大きくズレたときに使います。値段がきっと元に戻るだろうと予想して取引するやり方です。5分ごとの値動きを見て、短い時間でチャンスを探します。

取引数
35
勝率
54.29%
最終リターン
-4.35%
最大DD
31.82%

導入と前提条件

この作戦は、ビットコインの値段が、その日の平均的な値段から大きくズレたときに使います。値段がきっと元に戻るだろうと予想して取引するやり方です。5分ごとの値動きを見て、短い時間でチャンスを探します。

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

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

VWAP Reversion の理論的背景

この作戦の基本にあるのは、「真ん中に戻ろうとする力」という考え方です。物の値段は、一時的にすごく上がったり下がったりしても、自然と平均的な値段に戻ろうとする性質があると言われています。この作戦では、VWAPをその「平均的な値段」だと考えます。値段がこの平均から大きく離れたときは、一時的な動きの可能性が高いので、元に戻るタイミングをねらって取引をするんです。

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

エントリー条件

  • ビットコインの値段が、その日の平均の値段(VWAP)より、決めておいた割合(たとえば2%)以上安くなったとき。(買うタイミングです)
  • ビットコインの値段が、その日の平均の値段(VWAP)より、決めておいた割合(たとえば2%)以上高くなったとき。(売るタイミングです)

エグジット条件

  • 買った後、値段が上がって目標のもうけが出たら、取引をやめて利益を確定させます。
  • 買った後、予想と反対に値段が下がってしまったら、損が大きくなる前に取引をやめます。
  • 売った後、値段が下がって目標のもうけが出たら、取引をやめて利益を確定させます。
  • 売った後、予想と反対に値段が上がってしまったら、損が大きくなる前に取引をやめます。

リスク管理

この作戦では、損をできるだけ小さくするためのルールがあります。もし予想と反対に値段が動いてしまったら、あらかじめ決めておいた金額の損が出た時点で、すぐに取引をやめます(これを「損切り」と言います)。また、一度に大金を使わないように、取引に使うお金の量を調整することも大切です。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数35回
勝率54.29%
平均利益2.6%
平均損失-3.18%
期待値-0.04%
プロフィットファクター0.92
最大ドローダウン31.82%
最終リターン-4.35%
シャープレシオ0
HODL(Buy&Hold)88.85%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/usr/bin/env python3
"""
VWAP回帰戦略
価格がVWAPから乖離したら回帰を狙う
"""
import pandas as pd
import numpy as np


def calculate_vwap_signals(df: pd.DataFrame, deviation_threshold: float = 2.0) -> pd.DataFrame:
    """
    VWAP回帰シグナルを生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    deviation_threshold : float
        乖離率の閾値(%)(デフォルト: 2.0)
    
    Returns:
    --------
    pd.DataFrame
        シグナル列が追加されたDataFrame
    """
    df = df.copy()
    
    # 日付でグループ化(日次VWAPを計算)
    df['date'] = pd.to_datetime(df.index).date
    
    # 各日のVWAPを計算
    df['typical_price'] = (df['high'] + df['low'] + df['close']) / 3
    df['pv'] = df['typical_price'] * df['volume']
    
    # 累積値を計算(日次でリセット)
    df['cumulative_pv'] = df.groupby('date')['pv'].cumsum()
    df['cumulative_volume'] = df.groupby('date')['volume'].cumsum()
    
    # VWAP計算
    df['vwap'] = df['cumulative_pv'] / df['cumulative_volume']
    
    # VWAPからの乖離率
    df['vwap_deviation'] = ((df['close'] - df['vwap']) / df['vwap']) * 100
    
    # 標準偏差バンド(オプション)
    df['vwap_std'] = df.groupby('date')['typical_price'].transform(lambda x: x.expanding().std())
    df['upper_band'] = df['vwap'] + (df['vwap_std'] * 2)
    df['lower_band'] = df['vwap'] - (df['vwap_std'] * 2)
    
    # シグナル生成(乖離からの回帰狙い)
    df['is_buy'] = (
        (df['vwap_deviation'] < -deviation_threshold) &  # VWAPより下に乖離
        (df['vwap_deviation'].shift(1) >= -deviation_threshold)  # 閾値を下回った瞬間
    )
    
    df['is_sell'] = (
        (df['vwap_deviation'] > deviation_threshold) &  # VWAPより上に乖離
        (df['vwap_deviation'].shift(1) <= deviation_threshold)  # 閾値を上回った瞬間
    )
    
    # NaN値をFalseに置換
    df['is_buy'] = df['is_buy'].fillna(False)
    df['is_sell'] = df['is_sell'].fillna(False)
    
    # デバッグ情報
    print(f"VWAP乖離閾値: {deviation_threshold}%")
    print(f"買いシグナル数: {df['is_buy'].sum()}")
    print(f"売りシグナル数: {df['is_sell'].sum()}")
    
    return df

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

  1. 1この作戦では、値段が平均から大きく離れたタイミングで取引を始めることで、値段が平均に戻ろうとする動きを利益にしようとしています。
  2. 2成績を見てみると、勝った割合(勝率)は54.29%と半分を超えていますが、最終的には4.35%の損が出ています。これは、勝ったときのもうけよりも、負けたときの損のほうが、一回あたりで大きかったからだと考えられます。
  3. 3一番大きく損をしたときの割合(最大ドローダウン)が31.82%と大きめです。これは、一度の負けで大きく損をしたか、負けが連続してしまった時期があったことを示しています。

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

  1. 1物の値段が平均から大きく離れたとき、元に戻る動きをねらう作戦があることを学べます。
  2. 2作戦の成績(勝った割合や、もうけなど)をちゃんと分析することが、とても大事だとわかります。
  3. 3たとえ勝つ回数が多くても、損を小さくする工夫(損切り)がうまくいかないと、全体でプラスにするのは難しいということが学べます。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金は、持っているお金全体のほんの一部(たとえば100分の1とか)に決めます。こうすれば、もし取引に失敗しても、全体のお金が大きく減るのを防げます。

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

もし損がふくらんできたら、決めておいた金額でスパッと取引をやめること(損切り)が重要です。これが、大きな損を防ぐカギになります。

資金管理の方法

取引に使うお金は、最初に決めておきます。そして、勝っていても負けていても、気分で行動するのではなく、決めたルール通りにお金を管理します。

改良案の具体的提案

  • 取引を始めたりやめたりするタイミングを、もっと工夫して、より良いチャンスを見つけられるようにします。
  • 「これ以上損したらやめる」という損切りのルールをきっちり守って、一度の大きな負けを減らすようにします。
  • ビットコイン以外の他の商品や、5分ごと以外の時間の区切りでも、この作戦がうまくいくか試してみます。

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

  • この作戦は、短い時間の値段の「行き過ぎ」をねらうので、大きなニュースが出たりして市場がパニックになると、うまくいかないことがあります。
  • 実際に自分のお金で取引を始める前に、過去のデータを使って「もしこの作戦を使っていたらどうなっていたか」を十分にテストすることが大切です。
  • 取引に使うツールの設定や、作戦の数字(平均から何%離れたら取引するか、など)を少し変えるだけで、成績が大きく変わることがあります。

検証の透明性と信頼性

  • データの出所: この作戦の成績を調べるために使ったのは、昔のビットコインの値段のデータ(5分ごとの動き)です。
  • 検証のやり方: 昔の値段のデータを使って、この作戦通りに取引したらどういう結果になったかを、コンピューターで計算して確かめました。
  • コード: この計算をするために使ったコンピューターへの命令文(プログラム)は、誰でも見られるようになっています。
  • 注意事項: この説明は、「こうすれば儲かるよ」とオススメするものではありません。昔うまくいったからといって、未来もうまくいくとは限りません。取引には損をする可能性もありますので、自分自身でよく考えて判断してください。

よくある質問

Q.VWAPって何?

A.その日の取引での「平均的な値段」のことです。ただの平均じゃなくて、たくさん取引された値段を重視して計算される、ちょっと特別な平均値です。

Q.「乖離(かいり)」ってどういう意味?

A.「離れること」という意味です。この話では、ビットコインの値段が、平均の値段(VWAP)から離れていくことを指しています。

Q.「リバージョン」ってどういう意味?

A.英語で「元に戻る」という意味です。値段が平均から離れたあと、また平均のほうへ戻っていく動きのことです。

Q.この作戦はいつ使うのが良いの?

A.世の中が比較的落ち着いていて、値段が一時的に大きく動いても、また平均に戻ってきやすいようなときに、うまくいくかもしれません。

Q.勝つ回数が多いのに、なんで最終的に損してるの?

A.勝つ回数が多くても、一回ごとの「勝ち」でもらえるお金より、一回ごとの「負け」で失うお金のほうが大きいと、全部合わせるとマイナスになってしまうことがあるからです。「コツコツ勝って、ドカンと負ける」というイメージですね。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報