シェア:

ビットコインの値段が大きく動いた時、反対の動きで利益をねらう作戦

この作戦は、ビットコインの値段が「売られすぎ」や「買われすぎ」という特別な状態になった時に、あえて反対の行動(買う・売る)をして、利益を出そうとする考え方です。1時間ごとの値段の動きをチェックして、チャンスを探します。

取引数
275
勝率
57.09%
最終リターン
-46.45%
最大DD
54.68%

導入と前提条件

この作戦は、ビットコインの値段が「売られすぎ」や「買われすぎ」という特別な状態になった時に、あえて反対の行動(買う・売る)をして、利益を出そうとする考え方です。1時間ごとの値段の動きをチェックして、チャンスを探します。

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

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

CCI Reversal の理論的背景

ビットコインのようなデジタルなお金は、急に値段が上がったり下がったりすることがよくあります。でも、ずっと上がり続けたり、下がり続けたりすることはあまりありません。値段が大きく動くと、今度は反対の方向に動く力が働きやすくなることがあります。この作戦は、その「もどる力」をねらう考え方です。「CCI」というものさしは、今の値段が「普通」の状態からどれくらいずれているかを示してくれます。このずれがすごく大きくなった時が、「そろそろもどるかも?」と考えるチャンスになります。

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

エントリー条件

  • ビットコインが「売られすぎだよ」というサインが出たら、「今が買うチャンスだ!」と考えます。
  • ビットコインが「買われすぎだよ」というサインが出たら、「今が売るチャンスだ!」と考えます。

エグジット条件

  • 買ったビットコインをいつ売るかというと、値段の動きがある程度の大きさになった時です。
  • もう一つは、目標にしていた利益が出た時です(これを「利益確定」といいます)。
  • 反対に、もし損が出てしまったら、その損が大きくなりすぎないうちに取引をやめます(これを「損切り」といいます)。

リスク管理

もし取引で損をしてしまっても、その金額が大きくなりすぎないように、あらかじめ「ここまでなら損しても大丈夫」という金額を決めておきます。そして、その金額を超えないように、一回に取引する量を調整します。損がふくらみそうになったら、早めにやめてしまうことも大切です。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数275回
勝率57.09%
平均利益0.97%
平均損失-1.78%
期待値-0.21%
プロフィットファクター0.72
最大ドローダウン54.68%
最終リターン-46.45%
シャープレシオ-0.16
HODL(Buy&Hold)148.63%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/usr/bin/env python3
"""
CCI(Commodity Channel Index)逆張り戦略
CCIの極値で逆張りエントリー
"""
import pandas as pd
import numpy as np


def calculate_cci_signals(df: pd.DataFrame, cci_period: int = 20, 
                         oversold: float = -100, overbought: float = 100) -> pd.DataFrame:
    """
    CCIシグナルを生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    cci_period : int
        CCI計算期間(デフォルト: 20)
    oversold : float
        売られすぎ水準(デフォルト: -100)
    overbought : float
        買われすぎ水準(デフォルト: 100)
    
    Returns:
    --------
    pd.DataFrame
        シグナル列が追加されたDataFrame
    """
    df = df.copy()
    
    # Typical Price
    df['tp'] = (df['high'] + df['low'] + df['close']) / 3
    
    # Simple Moving Average of TP
    df['tp_sma'] = df['tp'].rolling(window=cci_period).mean()
    
    # Mean Deviation
    df['md'] = df['tp'].rolling(window=cci_period).apply(
        lambda x: np.abs(x - x.mean()).mean()
    )
    
    # CCI計算
    df['cci'] = (df['tp'] - df['tp_sma']) / (0.015 * df['md'])
    
    # シグナル生成
    df['is_buy'] = (
        (df['cci'] < oversold) & 
        (df['cci'].shift(1) >= oversold)
    )
    
    df['is_sell'] = (
        (df['cci'] > overbought) & 
        (df['cci'].shift(1) <= overbought)
    )
    
    # NaN値をFalseに置換
    df['is_buy'] = df['is_buy'].fillna(False)
    df['is_sell'] = df['is_sell'].fillna(False)
    
    print(f"CCI逆張り: 期間={cci_period}, 売られすぎ={oversold}, 買われすぎ={overbought}")
    print(f"買いシグナル数: {df['is_buy'].sum()}")
    print(f"売りシグナル数: {df['is_sell'].sum()}")
    
    return df

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

  1. 1この作戦の成績があまり良くなかったのは、ビットコインの値段が長い間ずっと下がり続けてしまったからです。こういう時には、みんなと反対の動きをする「逆張り」という作戦はうまくいきにくいみたいです。
  2. 2取引に勝つ回数(勝率)は半分以上ありましたが、一回の勝ちで得られるお金よりも、一回の負けで失うお金のほうが大きかったんです。だから、全体としては損をしてしまいました。
  3. 3一番大きく損をした時(最大DD)には、持っていたお金の半分以上が減ってしまいました。これは、値段が予想よりも大きく動いてしまった時に、損を小さくするルールがうまく働かなかったからかもしれません。

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

  1. 1「売られすぎ」「買われすぎ」のサインが出ても、必ずしも予想通りに値段が反対に動くわけではない、ということを学びました。
  2. 2世の中全体が「どんどん上がるぞ!」や「どんどん下がるぞ!」という一つの方向に強く動いている時は、反対の動きをねらう作戦はむずかしいことがわかりました。
  3. 3たとえ作戦がうまくいかなくても、「損はここまで」というルール(損切り)をしっかり守ることが、自分のお金を守るためにすごく大事だとわかりました。

リスク管理の具体的手法

取引量の決め方

1回の取引で使っていいお金の上限を決めておくことです。例えば、「持っているお金の1%までしか損しない」と決めたら、その金額になるように取引する量を計算します。こうすれば、もし負けても大きなダメージを受けずにすみます。

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

もしも損が続いてしまって、持っているお金が大きく減ってしまったら、一度すべての取引をお休みします。そして、冷静になって「どうしてうまくいかなかったんだろう?」と原因を考えて、作戦を立て直します。

資金管理の方法

取引に使うお金は、なくなっても生活に困らない余裕のあるお金だけにすることが大切です。そして、一度に全部のお金を使わずに、いくつかに分けて管理すると、リスクを小さくできます。

改良案の具体的提案

  • 「売られすぎ」「買われすぎ」のサインを見つけるためのルールを、もっとピッタリなものに調整して、より良いタイミングをねらえるようにすることです。
  • 値段が上がっている流れに乗って買ったり、下がっている流れに乗って売ったりする「トレンドフォロー」という作戦と組み合わせてみるのも良いかもしれません。
  • その時々の世の中の動きに合わせて、利益の目標や、損切りするルールを柔軟に変えられるようにすることです。

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

  • この作戦は、ビットコインのように値段がよく動くもので試すのが向いています。
  • 実際に自分のお金で取引を始める前に、昔のデータを使って、この作戦が本当にうまくいったかを試してみる(バックテスト)ことがとても大切です。
  • 世の中のニュースや、他の人の意見も参考にしつつ、最後はどうするかを自分自身でしっかり考えて決めることが大事です。

検証の透明性と信頼性

  • データの出所: この作戦の成績は、過去のビットコインの1時間ごとの値段のデータを使って計算しました。
  • 検証のやり方: Pythonというプログラミングの言葉を使って、昔のデータでこの作戦を試したらどうなったかを計算しました。このようなテストを「バックテスト」と言います。
  • コード: この成績を計算するために使ったプログラムは、誰でも見られるように公開されています。
  • 注意事項: この記事は、投資をすすめるものではありません。投資には、お金が増える可能性もあれば、減ってしまう可能性もあります。どうするかは、ご自身の責任でよく考えて決めてくださいね。

よくある質問

Q.ビットコインって何?

A.インターネット上で使える、電子的なお金のことです。わたしたちが普段使っている円やドルとは違って、国が管理しているわけではないのが特徴です。

Q.「逆張り」ってどういう意味?

A.多くの人が「これから値段が上がる!」と思って買っている時に売ったり、反対に「下がる!」と思って売っている時に買ったりする、みんなとは逆の行動をすることです。

Q.「売られすぎ」「買われすぎ」って、どうやってわかるの?

A.特別な計算方法があって、それを使うと、今の値段が普通のときと比べてどれくらい違うかがわかります。その計算結果がすごく低い数字になったら「売られすぎ」、すごく高い数字になったら「買われすぎ」と判断するんです。

Q.この作戦で本当に儲かるの?

A.残念ながら、今回のテスト結果では損をしてしまいました。どんな作戦でも、いつも必ずうまくいくわけではないので、注意が必要です。

Q.損をしないためにはどうすればいい?

A.損をゼロにすることは難しいですが、小さくすることはできます。「損切り」といって、予想と反対に値段が動いて損が出始めたら、そこで取引をやめて損失がふくらむのを防ぐことがとても大切です。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報