シェア:

すごい値動きに挑戦!「ドンチャンブレイクアウト」作戦を試したらこうなったよ

この作戦は、値段がグングン上がったり下がったりしている時に「今だ!」と飛び乗るやり方です。SOL/USDTっていうコインを5分ごとの値動きで試してみたんだけど、結果は残念ながら大きなマイナスになっちゃいました。でも、失敗から学べることはいっぱいあるんです!

取引数
733
勝率
26.88%
最終リターン
-95.45%
最大DD
95.89%

導入と前提条件

この作戦は、値段がグングン上がったり下がったりしている時に「今だ!」と飛び乗るやり方です。SOL/USDTっていうコインを5分ごとの値動きで試してみたんだけど、結果は残念ながら大きなマイナスになっちゃいました。でも、失敗から学べることはいっぱいあるんです!

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

  • 戦略名: Donchian Breakout を使用したトレンド追従戦略
  • 対象銘柄: SOL/USDT
  • 時間足: 5m
  • 期間: 2025-01-29〜2025-08-25(207日間)
  • 初期資金: $10,000
  • 手数料・スリッページ: 0.1% / 0.1%
  • 取引所: bybit

Donchian Breakout の理論的背景

この作戦の考え方は、「流れに乗る(トレンドフォロー)」っていう考え方がもとになっています。「一度動き始めたものは、しばらく同じ方向に進みやすい」っていう考え方です。例えば、過去20日間で一番高かった値段を今の値段が超えたら、「おお、これはもっと上がる流れが来たぞ!」と考えるんです。逆に、一番安かった値段を下に抜けたら、「もっと下がる流れかも!」と考えるわけです。この流れに乗って、うまく利益を出そうというのがこの作戦です。

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

エントリー条件

  • 過去20日間で一番高かった値段を、今の値段が超えたら「買い」でスタートします。
  • 過去20日間で一番安かった値段を、今の値段が下に抜けたら「売り」でスタートします。

エグジット条件

  • 「買い」でスタートしていた場合、値段が予想と反対に下がってきて、これまでで一番安かった値段よりもさらに下に行っちゃったら、売って「やめる」と決めます。
  • 「売り」でスタートしていた場合、値段が予想と反対に上がってきて、これまでで一番高かった値段よりもさらに上に行っちゃったら、買い戻して「やめる」と決めます。

リスク管理

損を大きくしないための約束ごとです。例えば、「もし損が〇〇円になったら、今日の取引はおしまい!」みたいに、自分でルールを決めておくことがとても大事になります。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数733回
勝率26.88%
平均利益1.57%
平均損失-1.13%
期待値-0.41%
プロフィットファクター0.47
最大ドローダウン95.89%
最終リターン-95.45%
シャープレシオ-0.42
HODL(Buy&Hold)-11.53%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/usr/bin/env python3
"""
ドンチャンチャネルブレイクアウト戦略
N期間の最高値・最安値をブレイクしたらエントリー
"""
import pandas as pd
import numpy as np


def calculate_donchian_signals(df: pd.DataFrame, period: int = 20) -> pd.DataFrame:
    """
    ドンチャンチャネルブレイクアウトシグナルを生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        チャネル期間(デフォルト: 20)
    
    Returns:
    --------
    pd.DataFrame
        シグナル列が追加されたDataFrame
    """
    df = df.copy()
    
    # ドンチャンチャネルの計算
    df['upper_channel'] = df['high'].rolling(window=period).max()
    df['lower_channel'] = df['low'].rolling(window=period).min()
    df['middle_channel'] = (df['upper_channel'] + df['lower_channel']) / 2
    
    # 前期間のチャネル値(ブレイクアウト判定用)
    df['prev_upper'] = df['upper_channel'].shift(1)
    df['prev_lower'] = df['lower_channel'].shift(1)
    
    # ブレイクアウトシグナル
    df['is_buy'] = (df['close'] > df['prev_upper']) & (df['close'].shift(1) <= df['prev_upper'].shift(1))
    df['is_sell'] = (df['close'] < df['prev_lower']) & (df['close'].shift(1) >= df['prev_lower'].shift(1))
    
    # NaN値をFalseに置換
    df['is_buy'] = df['is_buy'].fillna(False)
    df['is_sell'] = df['is_sell'].fillna(False)
    
    # デバッグ情報
    print(f"ドンチャンチャネル期間: {period}")
    print(f"買いシグナル数: {df['is_buy'].sum()}")
    print(f"売りシグナル数: {df['is_sell'].sum()}")
    
    return df

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

  1. 1まず、「勝率(しょうりつ)」が約27%と、とても低かったです。勝率っていうのは、取引して勝った割合のこと。10回やったら7回以上は負けていた計算になります。これが大きな原因の一つです。
  2. 2取引を全部合わせると、もうけよりも損のほうが大きくなってしまいました。これを専門の言葉で「期待値(きたいち)がマイナス」と言ったりします。
  3. 3一番大きくお金が減ってしまったとき(これを「最大ドローダウン」と言います)には、もとのお金がほとんど無くなる寸前(95%以上!)までいってしまいました。これは、損が大きくなりすぎないようにする「守りのルール」が、うまく働いていなかったのかもしれません。

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

  1. 1この作戦は、値段がグーンと一気に動く「トレンド」の時には強いみたいです。でも、そうじゃない時は「上がるかな?」と思ったらすぐ下がったりして、だまされることが多くなっちゃうんだと分かりました。
  2. 2勝つ回数が少なくても、一回勝ったときにすごく大きな利益が出せれば、全体ではプラスになることもあります。でも今回は、勝ったときの利益も小さくて、うまくいきませんでした。
  3. 3どんなに良さそうな作戦でも、うまくいく時といかない時があるということ。そして、うまくいかない時に、損をできるだけ小さくすることが、めちゃくちゃ大事なんだと痛感しました。

リスク管理の具体的手法

取引量の決め方

一回の取引に使うお金の量を、持っているお金全体のすごく小さい一部(例えば1%とか2%)に決めておきます。こうすれば、もし負けてもダメージは小さくてすみます。

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

もし損が積み重なって、持っているお金が10%みたいに決めた割合以上減ってしまったら、一度全部の取引をやめます。そして、作戦やお金の使い方をもう一度見直す時間を作ります。

資金管理の方法

そもそも、全部でいくらのお金を取引に使うのか、そして一回の取引でどれくらいの損ならOKとするのか、最初にちゃんと計画を立てておくことが大切です。

改良案の具体的提案

  • 「損切り」のルールをもっとハッキリ決めること。損が少しでも出たら、すぐに取引をやめるようにすれば、大きな負けを防げるかもしれません。
  • この作戦が活躍できる場面を見極めること。例えば、「すごく値段が動いている時だけ、この作戦を使う!」みたいに、フィルターをかけると良さそうです。
  • 他の道具(専門用語で「テクニカル指標」といいます)と組み合わせること。例えば、値段の勢いを測る道具と一緒に使って、「本当に今がチャンスか?」をダブルチェックするようにします。

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

  • まずは、すごく少ない金額で試してみましょう。いきなり大きなお金を使うんじゃなくて、お小遣いみたいな少ない金額で練習するのが大事です。
  • 取引の記録をつけよう。「いつ、いくらで買って、なぜそう思ったか」をノートに書くと、自分の成功や失敗の理由が分かって、次に活かせます。
  • 世の中のニュースも見てみよう。コインの値段は大きなニュースでガラッと変わることもあります。だから、今どんなことが起きているのかを知っておくのも役立ちます。

検証の透明性と信頼性

  • データの出所: 昔のSOL/USDTの値段のデータ(5分ごとの記録)を使いました。
  • 検証のやり方: 「もし、この作戦を過去のある期間(2025年1月29日から2025年8月25日まで)に使っていたら、どんな結果になっていたかな?」という実験(シミュレーション)をしました。
  • コード: この実験に使ったプログラムの設計図(コード)は、誰でも見られるようになっています。
  • 注意事項: これは、あくまで昔のデータを使った実験の結果です。だから、未来も同じようにうまくいくとは限りません。お金を実際に使うときは、自分の判断と責任でお願いしますね。

よくある質問

Q.ドンチャンブレイクアウトって、どんなときに効果があるの?

A.値段が「よーし、こっちに行くぞ!」と決めて、一気に上がったり下がったりし続ける「トレンド」の時に、一番力を発揮しやすい作戦です。逆に、値段がどっちに行くか迷って、行ったり来たりしている時は、苦手みたいです。

Q.SOL/USDTって何?

A.「SOL(ソル)」はソラナっていう名前のコイン(暗号資産)で、「USDT」はアメリカのドルと同じくらいの価値になるように作られたコインです。「SOL/USDT」は、その2つのコインを交換するときの値段のことだよ。

Q.5分足って、どういう意味?

A.グラフの一つで、5分間の値段の動きをギュッとまとめて1本の棒などで表したものです。5分ごとに新しい棒ができるので、短い時間の細かい値動きを見るときに使います。

Q.「勝率26.88%」って、そんなに低いの?

A.はい、かなり低いです。4回取引したら、3回は負けちゃった、っていう計算になります。勝つ回数が少なくても、1回勝ったときにすごく大きな利益が出せればプラスになることもあるけど、今回はそうはなりませんでした。

Q.「最大DD:95.89%」って、どういうこと?

A.これは「最大ドローダウン」のことで、一番お金が増えた時から、一番減ってしまった時までの下落率です。95.89%っていうのは、例えば100万円あったお財布が、一時的に4万円くらいまで減っちゃった、ということです。お財布が空っぽになる寸前までいった、という、すごく危険な状態だったことを示しています。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

A.期間中はレンジ・下落優勢と推測されます。

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報