シェア:

ビットコインの値段の動きを予測!みんなと逆をいく「はなれ具合作戦」

この作戦は、ビットコインの値段が「ふつうの値段」からすごく離れちゃったときに、「そろそろ元に戻るかな?」と予想して取引する方法です。1時間ごとの値動きを見て、昔のデータでうまくいくか試してみました。もうけるためのヒントが見つかるかもしれません!

取引数
55
勝率
58.18%
最終リターン
-13.42%
最大DD
23.08%

導入と前提条件

この作戦は、ビットコインの値段が「ふつうの値段」からすごく離れちゃったときに、「そろそろ元に戻るかな?」と予想して取引する方法です。1時間ごとの値動きを見て、昔のデータでうまくいくか試してみました。もうけるためのヒントが見つかるかもしれません!

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

  • 戦略名: Disparity Index を使用したトレンド追従戦略
  • 対象銘柄: BTC/USDT
  • 時間足: 1h
  • 期間: 2025-04-28〜2025-08-26(119日間)
  • 初期資金: $10,000
  • 手数料・スリッページ: 0.1% / 0.1%
  • 取引所: binance

Disparity Index の理論的背景

この作戦の考え方は、「値段は、いつもの値段に戻りやすい」というものです。例えば、お祭りの屋台のりんご飴を想像してみてください。いつもは300円なのに、今日だけ特別に1000円だったら、「高すぎる!きっとまた元の値段に戻るだろうな」って思いますよね。ビットコインの値段も同じで、急に上がりすぎたり下がりすぎたりすると、またいつもの値段に戻りやすいんです。この「戻りやすさ」を数字で表して、チャンスを探すのがこの作戦です。

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

エントリー条件

  • 値段が「ふつうの値段」の線より、すごく下に離れたら買います。
  • 値段が「ふつうの値段」の線より、すごく上に離れたら売ります。

エグジット条件

  • 買った後、値段が「ふつうの値段」の線に近づいてきたら、そこで取引を終わりにします(もうけを確定したり、損を止めたりします)。
  • 売った後も、値段が「ふつうの値段」の線に近づいてきたら、同じように取引を終わりにします。

リスク管理

大きな損をしないための工夫も大事です。「もし予想が外れてこれ以上損したらやめる」というルールを先に決めておきましょう。一度にたくさんのお金を使わないことも大切です。予想と反対に値段が動いたら、すぐにやめる勇気も必要ですよ。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数55回
勝率58.18%
平均利益0.75%
平均損失-1.65%
期待値-0.26%
プロフィットファクター0.64
最大ドローダウン23.08%
最終リターン-13.42%
シャープレシオ-0.3
HODL(Buy&Hold)16.67%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Disparity Index Trading Signal
価格と移動平均の乖離率を使用
"""
import pandas as pd
import numpy as np


def calculate_disparity_index_signals(df: pd.DataFrame,
                                    period: int = 14,
                                    threshold: float = 3.0) -> pd.DataFrame:
    """
    Disparity Index戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        移動平均期間(デフォルト: 14)
    threshold : float
        乖離率闾値(デフォルト: 3.0)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # 移動平均
    df['ma'] = df['close'].rolling(window=period).mean()
    
    # Disparity Index
    df['disparity'] = ((df['close'] - df['ma']) / df['ma']) * 100
    
    # シグナル初期化
    df['signal'] = 0
    df['is_buy'] = False
    df['is_sell'] = False
    
    position = 0
    
    for i in range(period, len(df)):
        # 買いシグナル(下方乖離)
        if position <= 0 and df['disparity'].iloc[i] < -threshold / 3:
            df.loc[df.index[i], 'is_buy'] = True
            df.loc[df.index[i], 'signal'] = 1
            position = 1
            
        # 売りシグナル(上方乖離)
        elif position >= 0 and df['disparity'].iloc[i] > threshold / 3:
            df.loc[df.index[i], 'is_sell'] = True
            df.loc[df.index[i], 'signal'] = -1
            position = -1
        else:
            df.loc[df.index[i], 'signal'] = position
    
    df['signal'] = df['signal'].fillna(0)
    
    return df


def get_strategy_name() -> str:
    """戦略名を返す"""
    return "Disparity Index"


def get_strategy_description() -> str:
    """戦略の説明を返す"""
    return "価格と移動平均の乖離率を使用した逆張り戦略"

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

  1. 1全部で55回取引をしたので、チャンスはそれなりにあったみたいです。
  2. 2勝った割合(勝率)は58.18%でした。半分以上は予想が当たって、もうけが出たということです。
  3. 3でも、1回の取引あたりの平均を見ると、結果として少しずつ損をしていました。勝つことも多いけど、負けたときの損が大きかったのかもしれません。

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

  1. 1値段が「ふつうの値段」から大きく離れると、また元に戻ろうとすることが多い、ということがわかります。
  2. 2みんなと逆をいく作戦は、タイミングがすごく大事です。小さいもうけをたくさん重ねても、一回の大きな損で全部なくなってしまうことがあるので、注意が必要です。
  3. 3勝った回数が多くても、必ずもうかるとは限らない、という大切なことが学べます。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金は、持っているお金のほんの少しだけ(例えば100分の1とか)にしましょう。そうすれば、もし負けても、ダメージは小さくてすみます。

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

もし損が続いて、持っているお金が10分の1くらい減ってしまったら、一度全部お休みしましょう。そして、作戦をもう一度考え直す時間を作ります。こうすることで、大負けを防げます。

資金管理の方法

取引に使うお金は、おこづかいや貯金の中から、「もしなくなっても大丈夫」と思える分だけにしましょう。生活に必要なお金は絶対に使ってはいけません。そして、もうけが出たら、その分だけ少しずつ取引に使うお金を増やすなど、上手にお金を管理することが大切です。

改良案の具体的提案

  • 「どれくらい離れたら取引するか」のルールを、もう少しだけ変えてみたら、もっと良いタイミングが見つかるかもしれません。
  • 取引をやめるタイミングも大事です。どうやったらもっともうけを伸ばせるか、損を小さくできるか、研究するのも面白そうです。
  • この作戦が苦手な場面もあります。例えば、値段がずっと上がりっぱなし、下がりっぱなしのときです。そんなときのために、他の作戦と組み合わせるのも一つの手です。

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

  • この作戦は、値段が大きく動いた後を狙うので、急に予想と反対に動くこともあります。びっくりしないように、心の準備をしておきましょう。
  • 「ふつうの値段」を計算する期間や、「どれくらい離れたら」のルールを少し変えるだけで、結果が全然ちがってくることがあります。色々な数字で試してみるのも面白いですよ。
  • 最終的にいくらもうかったかだけでなく、途中で一番大きくお金が減ったのはどれくらいかもチェックしましょう。自分がドキドキしないで続けられる作戦かどうかがわかります。

検証の透明性と信頼性

  • データの出所: 昔のビットコインの値段のデータを使って、このテストをしました。
  • 検証のやり方: あるルールを決めて、過去の約4ヶ月分のデータで「もしこの作戦を使っていたらどうなっていたかな?」というシミュレーションをしました。
  • コード: はい、この作戦をコンピューターで計算するためのプログラムの作り方も見ることができます。
  • 注意事項: 注意:このテストの結果は、あくまで昔のデータで試したものです。これから先も同じようにうまくいくとは限りません。お金を使うときは、必ず自分でよく考えて決めてくださいね。

よくある質問

Q.「ふつうの値段の線(移動平均線)」って何?

A.例えば、ここ最近の値段を全部足して、その日数で割った平均の値段を線でつないだものです。値段が今、高いのか安いのかを知るための「ものさし」のようなものです。

Q.「はなれ具合(乖離率)」って、どれくらいが「すごく離れてる」なの?

A.今回のテストでは、「ふつうの値段の線」からある一定の割合(1.5)以上、値段が離れたら「すごく離れてる!」と判断するルールにしました。上に離れても、下に離れても、どちらもチャンスと考えます。

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

A.「期待値」というのは、1回取引するごとに、平均でどれくらいもうかるか(または損するか)を表す数字です。これがマイナスだと、取引を続ければ続けるほど、平均的には少しずつお金が減っていく可能性が高い、ということです。

Q.「PF(もうけと損のバランス)」って何?

A.これは、もうかった金額の合計を、損した金額の合計で割った数字です。もし1より大きければ、もうけの方が多かったということです。今回のテストでは1より小さかったので、残念ながら損した金額の方が多かった、ということになります。

Q.「最大DD(いちばんお金が減った割合)」って何?

A.これは、テストの途中で、持っているお金が一番多かった時から、一番大きく減ってしまった時の割合です。23.08%ということは、一番うまくいかなかった時に、お金が一時的に23%くらい減ってしまった瞬間があった、という意味です。心の準備が必要かどうかの目安になります。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報