シェア:

ビットコインの値段の動きをチェック!「ボラティリティ・レシオ」で売り買いのチャンスを見つけよう

これは、ビットコインの5分ごとの値段のグラフを見て、値段の動きの激しさ(ボラティリティ)を分析する方法です。この方法で、いつ買うか、いつ売るかのチャンスを探します。昔のデータと比べて、今の値段がどれくらい激しく動いているかを調べるんですよ。

取引数
5802
勝率
9.31%
最終リターン
-100.00%
最大DD
100.00%

導入と前提条件

これは、ビットコインの5分ごとの値段のグラフを見て、値段の動きの激しさ(ボラティリティ)を分析する方法です。この方法で、いつ買うか、いつ売るかのチャンスを探します。昔のデータと比べて、今の値段がどれくらい激しく動いているかを調べるんですよ。

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

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

Volatility Ratio の理論的背景

この方法の元になる考え方は、「値段の動きの激しさが、急に強まったり弱まったりする時」は、全体の流れが変わりやすい、というものです。最近の値段の動きの大きさが、過去の一番大きかった動きと比べてどれくらいなのかを数字で表します。この数字が、決めておいた基準より大きくなったり小さくなったりした時に、売り買いのサインを探します。さらに、値段が平均の線より上にあるか下にあるか、といった情報も見て、もっと良いタイミングを見つけようとします。

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

エントリー条件

  • 値段の動きが急に激しくなって、値段も平均の線より上にあるとき。「よし、買おう!」と考えるチャンスです。
  • 値段の動きの激しさを表す数字が、前の数字より大きくなったときも、買うチャンスと考えます。

エグジット条件

  • 値段の動きが急に激しくなったけれど、値段は平均の線より下にあるとき。「そろそろ売ろうかな」と考えるタイミングです。
  • 値段の動きの激しさを表す数字が、前の数字より小さくなったときも、売るタイミングと考えます。

リスク管理

もし予想と反対に値段が動いてしまったら、損が大きくならないように、前もって決めておいた値段で必ず取引を終えるルールです。これで、大きな損を防ぎます。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数5802回
勝率9.31%
平均利益0.58%
平均損失-0.5%
期待値-0.4%
プロフィットファクター0.14
最大ドローダウン100%
最終リターン-100%
シャープレシオ-2.81
HODL(Buy&Hold)90.51%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Volatility Ratio Trading Signal Generator
現在のボラティリティと過去のボラティリティを比較
"""
import pandas as pd
import numpy as np


def calculate_volatility_ratio_signals(df: pd.DataFrame,
                                      period: int = 14,
                                      threshold: float = 0.5) -> pd.DataFrame:
    """
    Volatility Ratio戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        計算期間(デフォルト: 14)
    threshold : float
        シグナル閾値(デフォルト: 0.5)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # True Range計算
    df['h_l'] = df['high'] - df['low']
    df['h_c'] = np.abs(df['high'] - df['close'].shift(1))
    df['l_c'] = np.abs(df['low'] - df['close'].shift(1))
    df['true_range'] = df[['h_l', 'h_c', 'l_c']].max(axis=1)
    
    # 現在のTrue Range
    df['current_tr'] = df['true_range']
    
    # 過去のTrue Rangeの最大値
    df['max_tr'] = df['true_range'].rolling(window=period).max()
    
    # Volatility Ratio
    df['vr'] = df['current_tr'] / (df['max_tr'] + 0.0001)
    
    # VRの移動平均
    df['vr_ma'] = df['vr'].rolling(window=period).mean()
    
    # ボラティリティブレイクアウト検出
    df['vr_high'] = df['vr'] > (1 + threshold)
    df['vr_low'] = df['vr'] < threshold
    
    # 価格のトレンド
    df['price_ma'] = df['close'].rolling(window=period).mean()
    df['price_trend'] = np.where(df['close'] > df['price_ma'], 1, -1)
    
    # エクスパンション・コントラクション
    df['vr_expanding'] = df['vr'] > df['vr_ma']
    df['vr_contracting'] = df['vr'] < df['vr_ma']
    
    # シグナル生成
    df['vr_prev'] = df['vr'].shift(1)
    df['vr_expanding_prev'] = df['vr_expanding'].shift(1)
    df['is_buy'] = (
        (df['vr_expanding'] & (df['vr_expanding_prev'] == False) & (df['price_trend'] > 0)) |
        (df['vr_low'] & (df['vr'] > df['vr_prev']))
    ) & df['vr'].notna()
    df['is_sell'] = (
        (df['vr_expanding'] & (df['vr_expanding_prev'] == False) & (df['price_trend'] < 0)) |
        (df['vr_high'] & (df['vr'] < df['vr_prev']))
    ) & df['vr'].notna()
    
    # 不要カラム削除
    df.drop(['h_l', 'h_c', 'l_c', 'current_tr', 'max_tr', 'vr_ma', 'vr_high', 'vr_low',
             'price_ma', 'price_trend', 'vr_expanding', 'vr_contracting', 
             'vr_prev', 'vr_expanding_prev'], axis=1, inplace=True, errors='ignore')
    
    return df

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

  1. 1この方法では、全部で5802回も取引をしましたが、勝てたのは100回のうち9回くらい(勝率9.31%)と、とても少なかったです。だから、もうけを出すのが難しかったみたいです。
  2. 21回の取引で平均して0.4%ずつ損をする計算(期待値がマイナス)になっていました。取引すればするほど、少しずつお金が減っていく状態だったことが、最後には全部損してしまった(最終損益-100%)原因の一つです。
  3. 3もうけた金額(利益)と損した金額(損失)を比べると、もうけがすごく小さかったようです。これは、取引で勝って得たお金よりも、手数料などで払ったお金の方がずっと多かったかもしれない、ということです。

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

  1. 1たくさん取引するやり方でも、勝つ回数が少なかったり、1回あたりの平均がマイナスだったりすると、全部合わせてもうけるのは難しい、ということが分かりました。
  2. 2「値段の動きの激しさ」をはかる方法だけでなく、他のいろんな方法と組み合わせることが大事なんだな、と感じました。
  3. 3なんでうまくいかなかったのか原因を調べて、どうすれば良くなるかを考えることが、もっと良い方法を作るために大切だと分かりました。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金は、自分が持っているお金のすごく小さい一部(たとえば100分の1とか)だけにします。こうすれば、もし予想がはずれても、失うお金が少なくてすみます。

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

もし取引で負けが続いても、持っているお金全体が、決めた割合以上(たとえば10分の1)減らないようにします。もしそれ以上減ってしまったら、一度取引をお休みする、などのルールを決めておきます。

資金管理の方法

取引に使うお金は、万が一なくなっても生活に困らないお金だけにしましょう。また、もうけが出たら、その一部は使わずに取っておくなど、上手にお金を管理することが大切です。

改良案の具体的提案

  • 勝てる回数を増やすために、「こんな時には絶対に取引しない」みたいにルールを厳しくしたり、他のグラフ分析ツールと組み合わせたりする方法を考えてみます。
  • 1回あたりの取引の平均をプラスにするために、「ここまで損したらやめる(損切り)」や「ここまでもうかったらやめる(利益確定)」のルールをもっと上手なものに見直します。
  • もし取引の回数が多すぎるなら、取引する時間を決めたり、5分ごとじゃなくて1時間ごとなど、もっと長い時間のグラフを使ったりして、回数を減らすことも考えられます。

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

  • この方法は5分ごとのグラフを使うので、値段の動きがとても速くて激しいです。だから、初めての人は、まず練習用のニセのお金で取引(デモ取引)をしてみて、慣れるのがおすすめです。
  • 「基準にする数字」や「比べる期間の長さ」などの設定を変えると、この方法の動きも変わります。いろんな数字で試してみて、自分に合う設定を見つけるのも面白いですよ。
  • この実験の結果は、あくまでも昔のデータを使ったものです。未来も同じようにうまくいくとは限りません。いつもマーケット(市場)の様子に気を配ることが大切です。

検証の透明性と信頼性

  • データの出所: この実験は、ビットコインの5分ごとの昔の値段のデータ(いつ始まって、一番高くていくらで、一番安くていくらで、最後にいくらになったか)を使って行われました。
  • 検証のやり方: 昔の値段のデータにこの方法のルールを当てはめて、「もしこのルールで取引していたら、どうなっていただろう?」というのをコンピューターで計算して、結果を確かめています。
  • コード: この方法をコンピューターで動かすためのプログラム(コード)は、誰でも見られるようになっています。
  • 注意事項: この説明は、投資をすすめるものではありません。取引には損をする危険があります。お金を使うかどうかは、最後は必ず自分で考えて決めてくださいね。

よくある質問

Q.「ボラティリティ・レシオ」って、何を比べているの?

A.最近の値段の動きの大きさと、過去に一番大きく動いたときの大きさを比べています。今の値段の動きが、昔と比べてどれくらい激しいのかを調べるためです。

Q.勝つ回数がすごく少ないんだけど、大丈夫?

A.勝つ回数が少ないのは、ちょっと心配ですよね。こういう方法では、小さくたくさん負けても、一回勝ったときにすごく大きくもうける、という作戦もあります。ただ、今回の結果では、それがうまくいかなかったみたいです。

Q.5分ごとのグラフって、忙しすぎない?

A.そうですね、5分ごとのグラフは値段の動きがとても速いので、チャンスも多いけど失敗も増えやすいです。慣れるまでは練習用の取引で試したり、1時間ごとのグラフなど、もっとゆっくりしたもので試したりするのがおすすめです。

Q.「期待値がマイナス」って、どういう意味?

A.それは、平均すると「1回取引するごとに、少しずつお金が減っていく」という意味です。これを続けると、だんだん損をしてしまう可能性が高い、という状態のことです。

Q.この方法で、本当に儲かるの?

A.今回の実験結果だけを見ると、残念ながら大きく損をしています。でも、設定を変えたり、他のやり方と組み合わせたりすれば、うまくいくようになる可能性はあります。ただ、これはあくまで昔のデータでの話なので、未来も同じ結果になるとは限りません。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報