シェア:

ビットコインの値動きをキャッチ!「プライスチャネル」で投資に挑戦してみよう

ビットコインの値段の動きには、ある「通り道」のようなものがあるんです。この「プライスてャネル」という通り道を使った投資の方法について、実際に約4ヶ月間試してみたらどうなったのか、一緒に見ていきましょう。

取引数
34
勝率
29.41%
最終リターン
-10.74%
最大DD
18.09%

導入と前提条件

ビットコインの値段の動きには、ある「通り道」のようなものがあるんです。この「プライスてャネル」という通り道を使った投資の方法について、実際に約4ヶ月間試してみたらどうなったのか、一緒に見ていきましょう。

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

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

Price Channel の理論的背景

この方法の考え方は、「値段って、だいたいいつも決まった範囲で上がったり下がったりするよね」という考えが元になっています。もし、その範囲を上に突き抜けたら、「これはもっと上がるかも!」と考えて買ってみます。逆に、下に突き抜けたら、「もっと下がるかも!」と考えて売ってみるんです。でも、思った通りにいかないこともあるので、いつ取引をやめるか(出口)のルールを決めておくのが、とっても大事になります。

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

エントリー条件

  • 過去20時間のあいだで、いちばん高かった値段よりも、今の値段が高くなったら「買い」の合図です。
  • 過去20時間のあいだで、いちばん安かった値段よりも、今の値段が安くなったら「売り」の合図です。

エグジット条件

  • 「買い」で始めたときは、過去10時間のあいだのいちばん安い値段よりも、今の値段が安くなったら、そこで取引を終わりにします。これは、利益が出ているときも、損しているときも同じルールです。
  • 「売り」で始めたときは、過去10時間のあいだのいちばん高い値段よりも、今の値段が高くなったら、そこで取引を終わりにします。これも、利益が出ていても損していても同じです。

リスク管理

もし予想がはずれてお金が減りそうになったら、大きな損になる前に取引をやめることが大切です。一度に全部のお金を使わずに、少しずつ取引することで、もしもの時のダメージを小さくできます。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数34回
勝率29.41%
平均利益2.38%
平均損失-1.43%
期待値-0.31%
プロフィットファクター0.68
最大ドローダウン18.09%
最終リターン-10.74%
シャープレシオ-0.22
HODL(Buy&Hold)16.56%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Price Channel Trading Signal
価格チャネルブレイクアウト戦略
"""
import pandas as pd
import numpy as np


def calculate_price_channel_signals(df: pd.DataFrame,
                                   upper_period: int = 20,
                                   lower_period: int = 20,
                                   exit_period: int = 10) -> pd.DataFrame:
    """
    Price Channel戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    upper_period : int
        上部チャネル期間(デフォルト: 20)
    lower_period : int
        下部チャネル期間(デフォルト: 20)
    exit_period : int
        エグジット用チャネル期間(デフォルト: 10)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # エントリー用チャネル
    df['upper_channel'] = df['high'].shift(1).rolling(window=upper_period).max()
    df['lower_channel'] = df['low'].shift(1).rolling(window=lower_period).min()
    df['middle_channel'] = (df['upper_channel'] + df['lower_channel']) / 2
    
    # エグジット用チャネル(より短期)
    df['upper_exit'] = df['high'].shift(1).rolling(window=exit_period).max()
    df['lower_exit'] = df['low'].shift(1).rolling(window=exit_period).min()
    
    # チャネル幅(ボラティリティ指標)
    df['channel_width'] = df['upper_channel'] - df['lower_channel']
    df['channel_width_ma'] = df['channel_width'].rolling(window=upper_period).mean()
    
    # シグナル初期化
    df['signal'] = 0
    df['is_buy'] = False
    df['is_sell'] = False
    
    # 現在のポジション状態を追跡
    position = 0
    
    for i in range(max(upper_period, lower_period), len(df)):
        # 買いシグナル(上部チャネルブレイクアウト)
        if position <= 0 and df['close'].iloc[i] > df['upper_channel'].iloc[i]:
            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['lower_channel'].iloc[i]:
            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
    
    # NaN値を0で埋める
    df['signal'] = df['signal'].fillna(0)
    
    return df


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


def get_strategy_description() -> str:
    """戦略の説明を返す"""
    return "価格チャネルのブレイクアウトを狙うトレンドフォロー戦略"

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

  1. 1この方法は、値段がぐんぐん上がったり下がったりする「波」に乗るのが得意です。でも、今回は値段があまりハッキリ動かない、行ったり来たりの時期だったのかもしれません。そのため、トンネルを抜けたと見せかけて、すぐに戻ってきちゃう「だまし」が多くて、うまく勝てなかった可能性があります。
  2. 2勝てた確率は約29%でした。これは、3回やって1回勝てるかどうか、というくらいです。今回は、勝ったときにもらえるお金よりも、負けたときに失うお金のほうが大きくなってしまい、全体で見るとマイナスになってしまいました。
  3. 3一番うまくいかなかった時期には、お金が約18%も減ってしまいました。これは、何もせずにただビットコインを持っていた場合(約16%のプラス)よりも、悪い結果だったということになります。

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

  1. 1「プライスチャネル」のようなシンプルなルールでも、いつでもうまくいくわけじゃない、ということがわかりました。今の値動きが、波に乗っている時期なのか、行ったり来たりしている時期なのか、見分けることがとても大事なんですね。
  2. 2何回勝てたか(勝率)だけじゃなくて、勝ったときにいくら増えて、負けたときにいくら減ったのか、トータルでプラスになったのかどうかを見ることが大切だとわかりました。
  3. 3どんなに良い方法でも、「何時間前までの値段を見るか」みたいな設定を、そのときの状況に合わせて変えていくことが必要なんですね。そして、大きな失敗をしないように、しっかり自分のお金を守るルール(リスク管理)が一番大事だということも学びました。

リスク管理の具体的手法

取引量の決め方

一度の取引に使うお金は、持っているお金のほんの一部(例えば100分の1とか)だけにします。こうすれば、もし負けても、全体のお金がガクッと減ることはありません。

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

もし、全体のお金が、ある程度(例えば10%)減ってしまったら、一度全部の取引をお休みします。そして、やり方や設定が今の状況に合っているか、じっくり考え直します。こうすることで、ズルズルと負け続けるのを防げます。

資金管理の方法

取引で増えたお金を、次も全部使っちゃうのか、それとも少しは貯金しておくのか、ちゃんと計画を立てることが大事です。こうすることで、安定してコツコツお金を増やしていくことができます。

改良案の具体的提案

  • トンネルを抜けた!とすぐに判断するんじゃなくて、抜けた後の勢いがどれくらい強いかとか、他の道具(例えば「移動平均線」)も一緒に見てあげると、「だまし」に引っかかりにくくなるかもしれません。
  • 「何時間前までの値段を見るか」という設定を、そのときの値動きに合わせてコンピューターが自動で変えるようにしたり、色々な数字の組み合わせを試したりすると、もっと良い結果が出るかもしれません。
  • 取引をやめるタイミングのルールを、もっと賢くするのも良い方法です。例えば、「うまくいっているときは、できるだけ長く続けて利益を大きくする」、「ダメそうなときは、すぐにやめて損を小さくする」みたいに、工夫する余地がありそうです。

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

  • この方法は、値段がぐんぐん上がっていたり、逆にどんどん下がっていたりする「波のある時」に力を発揮しやすいです。値段が狭い範囲で上がったり下がったりしている「行ったり来たり」の時には、「だまし」が多くてうまくいかないことがあるので、注意が必要です。
  • 「何時間前までを見るか」みたいな設定は、ビットコインでやるのか、他のものでやるのか、1時間ごとに見るのか、1日ごとに見るのか、によって一番いい数字が変わってきます。色々試してみて、自分にピッタリの設定を見つけるのが大事です。
  • このお話は、あくまで過去の値段で試してみた結果です。「未来もこうなる!」と決まったわけではありません。もし実際にやってみるなら、まずはお小遣いみたいな少ないお金で試してみて、慎重に進めるのがおすすめです。

検証の透明性と信頼性

  • データの出所: このテストでは、過去のビットコインの1時間ごとの値段のデータを使いました。
  • 検証のやり方: あるプログラムを使って、2025年4月28日から8月26日までの約4ヶ月間、この方法がうまくいったかどうかを、過去のデータでチェックしました。これを「バックテスト」と言います。
  • コード: この方法をコンピューターで動かすためのプログラム(Pythonコード)も、ちゃんと用意されています。
  • 注意事項: このお話は、あくまで情報のひとつです。「こうすれば絶対もうかるよ!」とおすすめしているわけではありません。投資には、お金が減ってしまう可能性(リスク)が必ずあります。やるかやらないかは、最後は自分で決めてくださいね。

よくある質問

Q.「プライスチャネル」って、どうやって作るの?

A.例えば、「過去20時間の値段」の中で、いちばん高かった所といちばん安かった所に線を引きます。その2本の線でできた、値段の「通り道」みたいなものがプライスチャネルです。

Q.「ブレイクアウト」ってどういう意味?

A.値段が、その「通り道」の天井や床を、勢いよく突き抜けることです。この瞬間に、大きな値動きが始まるかもしれない、と考えます。

Q.勝率が低いって、全然勝てないってこと?

A.そういうわけでもないんです。例えば10回取引して3回しか勝てなくても、その3回で大きくプラスになって、負けた7回のマイナス分よりも大きければ、トータルではプラスになります。なので、勝率だけで良いか悪いかは決められないんですよ。

Q.PFって何?

A.「プロフィットファクター」の略です。「もうかったお金の合計」を「損したお金の合計」で割り算した数字です。もしこの数字が1より大きかったら、損した分よりもうかった分の方が多い、つまり全体でプラスになっている、ということです。

Q.HODLってどういう意味?

A.これは、ビットコインなどの暗号資産(仮想通貨)の世界で使われる言葉で、「ガチホールド(がっちり持ち続ける)」みたいな意味です。値段が上がっても下がっても、売らずにずっと持っておくことを言います。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報