シェア:

ビットコインの動きを予測!「いつもの範囲」で考える投資の作戦

この作戦は、ビットコインの1時間ごとの値動きグラフを使って、「標準偏差チャネル」という道具を使います。これは、値段が「いつもの範囲」からどれくらいはみ出しているかを見るためのものです。約4ヶ月間、この作戦を試してみたらどうなるかを調べてみました。結果は、残念ながら少し損をしてしまいましたが、この失敗から学べることはたくさんあります。

取引数
49
勝率
48.98%
最終リターン
-15.30%
最大DD
22.51%

導入と前提条件

この作戦は、ビットコインの1時間ごとの値動きグラフを使って、「標準偏差チャネル」という道具を使います。これは、値段が「いつもの範囲」からどれくらいはみ出しているかを見るためのものです。約4ヶ月間、この作戦を試してみたらどうなるかを調べてみました。結果は、残念ながら少し損をしてしまいましたが、この失敗から学べることはたくさんあります。

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

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

Standard Deviation Channel の理論的背景

この作戦の根っこにある考え方は、「平均的なものから大きく外れたものは、また平均に戻りやすい」という性質です。ビットコインの値段も、急に上がったり下がったりしても、いつかは落ち着いた値段に戻ろうとすることがよくあります。この作戦では、過去20時間分の値段の動きを見て、だいたい真ん中の値段(平均)を計算します。そして、その真ん中から値段がどれくらいバラついているかも計算します。その「バラつき具合」を2倍した幅を、真ん中の線の上下に引くと、トンネルのような帯(チャネル)ができます。これが「いつもの値動きの範囲」の目安になります。値段がこの帯の外にはみ出したら、「お、ちょっと動きすぎかな?そろそろ中に戻ってくるかも」と考えて、反対に動くタイミングを狙うのです。

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

エントリー条件

  • 値段のグラフが、さっきまで「いつもの範囲」の下の線より下にあったのに、今、その線を越えて中に戻ってきたときです。これが『買い』のサインになります。
  • そして、まだビットコインを持っていないときに、このサインが出たら買ってみます。

エグジット条件

  • 値段のグラフが、さっきまで「いつもの範囲」の上の線より上にあったのに、今、その線を越えて中に戻ってきたときです。これが『売り』のサインになります。
  • そして、すでにビットコインを持っているときに、このサインが出たら売ってみます。

リスク管理

もし失敗しても大きな損をしないように、一度にたくさんのお金を使わないようにします。もし予想が外れて損が出ても、「持っているお金の何パーセントまでなら損しても大丈夫」と、前もって決めておくことがとても大切です。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数49回
勝率48.98%
平均利益1.08%
平均損失-1.67%
期待値-0.32%
プロフィットファクター0.62
最大ドローダウン22.51%
最終リターン-15.3%
シャープレシオ-0.33
HODL(Buy&Hold)9.89%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Standard Deviation Channel Trading Signal
標準偏差チャネルを使用したトレード
"""
import pandas as pd
import numpy as np


def calculate_standard_deviation_channel_signals(df: pd.DataFrame,
                                              period: int = 20,
                                              std_multiplier: float = 2.0) -> pd.DataFrame:
    """
    Standard Deviation Channel戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        計算期間(デフォルト: 20)
    std_multiplier : float
        標準偏差の乗数(デフォルト: 2.0)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # 線形回帰値と標準偏差を計算
    df['lr_value'] = np.nan
    df['std_value'] = np.nan
    
    for i in range(period - 1, len(df)):
        data = df['close'].iloc[i-period+1:i+1].values
        if len(data) >= 2:
            x = np.arange(len(data))
            coeffs = np.polyfit(x, data, 1)
            regression_line = coeffs[0] * x + coeffs[1]
            df.loc[df.index[i], 'lr_value'] = regression_line[-1]
            df.loc[df.index[i], 'std_value'] = np.std(data - regression_line)
    
    # チャネル
    df['upper_channel'] = df['lr_value'] + std_multiplier * df['std_value']
    df['lower_channel'] = df['lr_value'] - std_multiplier * df['std_value']
    
    # シグナル初期化
    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['close'].iloc[i] > df['lower_channel'].iloc[i] and \
           df['close'].iloc[i-1] <= df['lower_channel'].iloc[i-1]:
            df.loc[df.index[i], 'is_buy'] = True
            df.loc[df.index[i], 'signal'] = 1
            position = 1
            
        # 売りシグナル
        elif position >= 0 and df['close'].iloc[i] < df['upper_channel'].iloc[i] and \
             df['close'].iloc[i-1] >= df['upper_channel'].iloc[i-1]:
            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



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

  1. 1勝ったり負けたりする確率が、だいたい半分半分(勝率約49%)でした。これだと、なかなか大きなプラスにはなりにくいです。
  2. 21回の取引で、平均して0.32%ずつ損をしてしまう計算でした。つまり、やればやるほど、少しずつお金が減ってしまう可能性があったということです。
  3. 3一番うまくいかなかった時期には、持っているお金が一時的に22.51%も減ってしまいました。これは結構なピンチなので、損をしないためのルールが足りなかったのかもしれません。

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

  1. 1「これはイケる!」と思った作戦でも、実際にやってみるとうまくいかないことがあります。だから、「なんでダメだったんだろう?」と理由を考えることが大切です。
  2. 2勝った回数だけでなく、1回ごとの勝ち負けで動く金額も大事です。トータルで見て、この作戦が良いのか悪いのかを判断する必要があります。
  3. 3相場の雰囲気(すごく盛り上がっている時か、静かな時か)によって、作戦がうまくいく時といかない時がある、ということが分かりました。

リスク管理の具体的手法

取引量の決め方

1回の挑戦で使うお金は、持っているお金全部のうちの、ほんの一部(例えば1%とか2%)だけにします。こうすれば、もし失敗しても、大ケガをしなくて済みます。

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

もし持っているお金が、決めておいた割合(例えば10%)以上減ってしまったら、一度お休みします。そして、作戦をもう一度見直します。これで、どんどん損がふくらむのを防げます。

資金管理の方法

投資に使うお金は、なくなっても生活に困らない「余裕のあるお金」だけにしましょう。また、勝って儲かったら少しだけ使うお金を増やし、負けて損したら減らす、というように、状況に合わせて調整することも大切です。

改良案の具体的提案

  • 「いつもの範囲」の幅を広くしたり狭くしたり調整して、もっと良い結果にならないか試してみます。
  • 「買いだ!」「売りだ!」というサインが出たときに、「本当に今で大丈夫かな?」と確認する別のチェック方法を追加してみます。
  • いつ買うかだけでなく、「いつ売って終わりにするか」という出口のルールをもっと上手なものにしてみます。

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

  • この作戦は、値動きが激しすぎず、穏やかな時にうまくいくかもしれません。相場の雰囲気を見て、使うかどうか決めると良さそうです。
  • 計算に使う期間や「いつもの範囲」の幅などを色々変えてみて、自分にピッタリな設定を見つけることが大切です。
  • 実際にお金を使う前に、昔のデータを使って何度も練習してみましょう。そうすると、この作戦の得意なことや苦手なことが分かってきます。

検証の透明性と信頼性

  • データの出所: このテストで使ったのは、実際の取引所が記録しているビットコインの過去の値段のデータです。
  • 検証のやり方: パソコンのプログラムを使って、過去のデータにこの作戦をあてはめたらどうなるか、シミュレーション(模擬実験)をしました。
  • コード: このテストで使った計算の方法は、誰でも見られるように公開されています。
  • 注意事項: このテストの結果は、あくまで過去のデータでのお話です。未来でも同じようにうまくいくとは限りません。投資には損をする可能性もあるので、自分自身の判断と責任で行ってくださいね。

よくある質問

Q.「標準偏差チャネル」って何?

A.値段の動きの「いつもの範囲」を教えてくれる、グラフ上のトンネルみたいなものです。

Q.「標準偏差」って難しそうだけど、どういう意味?

A.データ(ここでは値段)が、平均からどれくらいバラついているかを示す目安のことだよ。バラつきが大きいほど、この数字も大きくなるんだ。

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

A.取引を何回も繰り返していると、平均すると少しずつ損をしてしまう、ということを意味しているんだ。

Q.「最大DD」って、一番損したときの金額?

A.一番調子が良くてお金が増えた時から、一番調子が悪くてお金が減った時までの、一番大きな落ち込み具合(パーセント)のことだよ。

Q.この作戦で勝つためにはどうしたらいい?

A.「いつもの範囲」の幅を変えてみたり、他の道具と組み合わせたり、相場の雰囲気に合わせて使ったり、色々な工夫をすることが大切だよ。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報