シェア:

ビットコインで挑戦!「かしこいチャネル」作戦をわかりやすく解説します

この作戦は、ビットコインの値段が5分ごとにどう動くかを見て、売り買いのチャンスを見つけるための方法です。周りの状況に合わせて賢く変化する「かしこいチャネル」という道具を使って、上手に取引することを目指します。

取引数
803
勝率
13.45%
最終リターン
-95.05%
最大DD
95.10%

導入と前提条件

この作戦は、ビットコインの値段が5分ごとにどう動くかを見て、売り買いのチャンスを見つけるための方法です。周りの状況に合わせて賢く変化する「かしこいチャネル」という道具を使って、上手に取引することを目指します。

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

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

Adaptive Channel Index の理論的背景

この作戦の元にある考え方は、「世の中の動きはいつも変わる」ということです。ビットコインの値段の動き方も、激しい時とおだやかな時があります。そこで、その時の値動きの激しさを測る道具を使って、チャネルの幅を自動で変えるんです。値動きが激しい時は幅を広く、おだやかな時は幅をせまくします。こうすることで、どんな状況でも売り買いのチャンスを見つけやすくなります。「ACI」という、値段がチャネルのどの辺にいるかを示す数字を使って、0.2より小さくなったら買いの準備、0.8より大きくなったら売りの準備、というふうにタイミングをはかります。

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

エントリー条件

  • ACIという数字が、0.2より小さくなった後で、また0.2より大きくなったら買います。
  • 値段がチャネルの下の線より下に行ってしまってから、また線の上に戻ってきたら買います。

エグジット条件

  • ACIという数字が、0.8より大きくなった後で、また0.8より小さくなったら取引を終わります(利益が出ても損が出ても、ここで一旦やめます)。
  • 値段がチャネルの上の線より上に行ってしまってから、また線の下に戻ってきたら取引を終わります。

リスク管理

大きな損をしないための工夫はとても大切です。この作戦の過去の成績を見ると、803回も取引したのに、勝てたのは約13%だけでした。しかも、最終的にはお金が大きく減ってしまいました。これは、勝つときは少しだけ、でも負けるときは大きく損をしてしまったからだと考えられます。だから、損が大きくならないうちに取引をやめる「損切り」という工夫が、ものすごく重要になります。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数803回
勝率13.45%
平均利益0.37%
平均損失-0.49%
期待値-0.37%
プロフィットファクター0.15
最大ドローダウン95.1%
最終リターン-95.05%
シャープレシオ-1.1
HODL(Buy&Hold)33.11%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Adaptive Channel Index Trading Signal Generator
市場状況に応じて動的に調整されるチャネル
"""
import pandas as pd
import numpy as np


def calculate_adaptive_channel_signals(df: pd.DataFrame,
                                      period: int = 20,
                                      multiplier: float = 2.0) -> pd.DataFrame:
    """
    Adaptive Channel Index戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        基本期間(デフォルト: 20)
    multiplier : float
        チャネル幅の倍率(デフォルト: 2.0)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # ハイローチャネル
    df['highest'] = df['high'].rolling(window=period).max()
    df['lowest'] = df['low'].rolling(window=period).min()
    df['hl_mid'] = (df['highest'] + df['lowest']) / 2
    
    # ATRベースの適応幅
    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)
    df['atr'] = df['true_range'].rolling(window=period).mean()
    
    # 適応係数(ボラティリティ比率)
    df['atr_ratio'] = df['atr'] / df['atr'].rolling(window=period * 2).mean()
    df['adaptive_mult'] = multiplier * df['atr_ratio']
    
    # 適応チャネル
    df['channel_upper'] = df['hl_mid'] + df['adaptive_mult'] * df['atr']
    df['channel_lower'] = df['hl_mid'] - df['adaptive_mult'] * df['atr']
    
    # チャネル内での位置(ACI)
    df['aci'] = (df['close'] - df['channel_lower']) / (df['channel_upper'] - df['channel_lower'] + 0.0001)
    
    # ACIのスムージング
    df['aci_smooth'] = df['aci'].rolling(window=3).mean()
    
    # シグナル生成
    df['aci_prev'] = df['aci_smooth'].shift(1)
    df['is_buy'] = (
        ((df['aci_smooth'] > 0.2) & (df['aci_prev'] <= 0.2)) |  # 下部チャネルからの反発
        ((df['close'] > df['channel_lower']) & (df['close'].shift(1) <= df['channel_lower'].shift(1)))
    ) & df['aci_smooth'].notna()
    df['is_sell'] = (
        ((df['aci_smooth'] < 0.8) & (df['aci_prev'] >= 0.8)) |  # 上部チャネルからの反落
        ((df['close'] < df['channel_upper']) & (df['close'].shift(1) >= df['channel_upper'].shift(1)))
    ) & df['aci_smooth'].notna()
    
    # 不要カラム削除
    df.drop(['highest', 'lowest', 'hl_mid', 'h_l', 'h_c', 'l_c', 'true_range',
             'atr_ratio', 'adaptive_mult', 'aci_smooth', 'aci_prev'], 
            axis=1, inplace=True, errors='ignore')
    
    return df

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

  1. 1勝った割合が約13%とすごく低いのは、売り買いのタイミングがずれていたり、損切りがうまくできていなかったりするからかもしれません。
  2. 2成績を表すPFという数字が、1よりずっと小さい0.15でした。これは、儲けたお金よりも、損したお金のほうがずっと大きかった、ということを表しています。
  3. 3最大DDという数字が95.1%とすごく大きいのは、一時期、持っていたお金がほとんど無くなってしまうくらい、大きな失敗があったことを意味します。

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

  1. 1勝つ回数が少なくても、一回ごとの「勝ち」を大きく、「負け」を小さくできれば、うまくいく作戦もあります。でも、この作戦はそうなっていませんでした。
  2. 2値動きに合わせてチャネルの幅を変える、というアイデア自体は良いものです。でも、その設定や売り買いのルールが、実際のビットコインの動きと合っていなかったのかもしれません。
  3. 3過去のデータで試してみて成績が悪かった場合、そのまま使ってはいけません。なぜダメだったのかを考えて、やり方をもっと良くしていくことが大切です。

リスク管理の具体的手法

取引量の決め方

一度に使うお金の量を決めておくことは、お金を守る基本です。例えば、「1回の取引で損していいのは、持っているお金の1%まで」と決めておけば、続けて負けてもすぐにお金が全部なくなることはありません。

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

もし、持っているお金が10%のように、決めておいた割合以上減ってしまったら、一度取引をお休みします。そして、作戦や設定を見直す時間を作りましょう。この作戦ではお金が95.1%も減った時期があったので、このルールが全く守れていなかったと言えます。

資金管理の方法

長く取引を続けていくためには、計画が大切です。儲かったお金を次にどう使うか、損した時はどうやって取り戻すか、などを考えます。目の前の勝ち負けだけでなく、自分のお金全体がどうなっていくかを管理するんです。

改良案の具体的提案

  • 売り買いの合図になるACIの数字(0.2や0.8)を、今の状況に合わせて変えられないか考えてみます。
  • 「これ以上損したらやめる」という損切りのルールを、もっと厳しくします。そうすれば、大きな損を防げるかもしれません。
  • 勝つ回数が少ない作戦なので、勝つときはできるだけたくさん利益をもらい、負けるときは少しの損で済ませる。そんな上手な売り買いのルールを考える必要があります。

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

  • この作戦は、過去のデータで試した結果がとても悪いです。なので、このまま本物のお金で使うのは、すごく危ないです。
  • もしこの作戦を試してみたいなら、まずは練習用のお金(デモトレード)で十分に試しましょう。そして、設定やルールをもっと良くしてからにしてください。
  • 昔のデータでうまくいったかだけでなく、今の実際の値動きを見ながら、注意深く判断することがとても大事です。

検証の透明性と信頼性

  • データの出所: この説明は、もらった情報をもとに作っています(どの会社のデータを使ったかは書かれていません)。
  • 検証のやり方: もらった設定とプログラムを使って、「もし過去にこの作戦をやっていたらどうなったか」を計算した結果が書かれています。
  • コード: 計算に使ったPythonというプログラムのコードは公開されています。
  • 注意事項: この作戦は、昔のデータでどうだったかを示しているだけです。これから先も同じようにうまくいくとは限りません。投資は、自分の判断と責任で行ってくださいね。

よくある質問

Q.どうしてこんなに負けている作戦を、わざわざ紹介するんですか?

A.これは、「うまくいかなかった例」として紹介しています。なぜ失敗したのかを理解して、「じゃあ、どうすれば良くなるかな?」と考えるための、良い勉強材料になるからです。

Q.「かしこいチャネル」は、どうして「かしこい」んですか?

A.その時の値動きの激しさを測る「ATR」という道具を使って、チャネルの幅を自動で変えてくれるからです。値動きが激しい時は幅を広く、おだやかな時は幅をせまくするので、なんだか市場に合わせているみたいで「かしこい」という名前がついています。

Q.ACIって、なんのことですか?

A.ACIは、「今の値段が、チャネルのどのへんにあるか」を0から1の数字で表したものです。0に近いほど下の方、1に近いほど上の方にいる、というイメージのメーターみたいなものです。

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

A.まず一番大事なのは、「これ以上損したらやめる」という損切りのルールをきちんと決めて守ることです。大きな負けを防ぐことが第一歩です。その上で、売り買いのタイミングをもっとうまく調整するなど、いろいろな工夫が必要になります。

Q.ビットコインの5分ごとの取引って、忙しいですか?

A.はい、5分ごとに値段が変わるので、グラフをこまめにチェックする必要があります。この作戦みたいに取引の回数が多くなると、さらに忙しくなります。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報