すごい値動きに挑戦!「ドンチャンブレイクアウト」作戦を試したらこうなったよ
この作戦は、値段がグングン上がったり下がったりしている時に「今だ!」と飛び乗るやり方です。SOL/USDTっていうコインを5分ごとの値動きで試してみたんだけど、結果は残念ながら大きなマイナスになっちゃいました。でも、失敗から学べることはいっぱいあるんです!
導入と前提条件
この作戦は、値段がグングン上がったり下がったりしている時に「今だ!」と飛び乗るやり方です。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)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでSOL/USDTのOHLCVを取得して前処理
- 『Donchian Breakout』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 733回 |
勝率 | 26.88% |
平均利益 | 1.57% |
平均損失 | -1.13% |
期待値 | -0.41% |
プロフィットファクター | 0.47 |
最大ドローダウン | 95.89% |
最終リターン | -95.45% |
シャープレシオ | -0.42 |
HODL(Buy&Hold) | -11.53% |
HODL戦略との比較
実装コード(Python)
#!/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まず、「勝率(しょうりつ)」が約27%と、とても低かったです。勝率っていうのは、取引して勝った割合のこと。10回やったら7回以上は負けていた計算になります。これが大きな原因の一つです。
- 2取引を全部合わせると、もうけよりも損のほうが大きくなってしまいました。これを専門の言葉で「期待値(きたいち)がマイナス」と言ったりします。
- 3一番大きくお金が減ってしまったとき(これを「最大ドローダウン」と言います)には、もとのお金がほとんど無くなる寸前(95%以上!)までいってしまいました。これは、損が大きくなりすぎないようにする「守りのルール」が、うまく働いていなかったのかもしれません。
この結果から学べる3つの教訓
- 1この作戦は、値段がグーンと一気に動く「トレンド」の時には強いみたいです。でも、そうじゃない時は「上がるかな?」と思ったらすぐ下がったりして、だまされることが多くなっちゃうんだと分かりました。
- 2勝つ回数が少なくても、一回勝ったときにすごく大きな利益が出せれば、全体ではプラスになることもあります。でも今回は、勝ったときの利益も小さくて、うまくいきませんでした。
- 3どんなに良さそうな作戦でも、うまくいく時といかない時があるということ。そして、うまくいかない時に、損をできるだけ小さくすることが、めちゃくちゃ大事なんだと痛感しました。
リスク管理の具体的手法
取引量の決め方
一回の取引に使うお金の量を、持っているお金全体のすごく小さい一部(例えば1%とか2%)に決めておきます。こうすれば、もし負けてもダメージは小さくてすみます。
損失が大きくなったときの対処法
もし損が積み重なって、持っているお金が10%みたいに決めた割合以上減ってしまったら、一度全部の取引をやめます。そして、作戦やお金の使い方をもう一度見直す時間を作ります。
資金管理の方法
そもそも、全部でいくらのお金を取引に使うのか、そして一回の取引でどれくらいの損ならOKとするのか、最初にちゃんと計画を立てておくことが大切です。
改良案の具体的提案
- 「損切り」のルールをもっとハッキリ決めること。損が少しでも出たら、すぐに取引をやめるようにすれば、大きな負けを防げるかもしれません。
- この作戦が活躍できる場面を見極めること。例えば、「すごく値段が動いている時だけ、この作戦を使う!」みたいに、フィルターをかけると良さそうです。
- 他の道具(専門用語で「テクニカル指標」といいます)と組み合わせること。例えば、値段の勢いを測る道具と一緒に使って、「本当に今がチャンスか?」をダブルチェックするようにします。
実用性の向上(運用上の注意)
- まずは、すごく少ない金額で試してみましょう。いきなり大きなお金を使うんじゃなくて、お小遣いみたいな少ない金額で練習するのが大事です。
- 取引の記録をつけよう。「いつ、いくらで買って、なぜそう思ったか」をノートに書くと、自分の成功や失敗の理由が分かって、次に活かせます。
- 世の中のニュースも見てみよう。コインの値段は大きなニュースでガラッと変わることもあります。だから、今どんなことが起きているのかを知っておくのも役立ちます。
検証の透明性と信頼性
- データの出所: 昔のSOL/USDTの値段のデータ(5分ごとの記録)を使いました。
- 検証のやり方: 「もし、この作戦を過去のある期間(2025年1月29日から2025年8月25日まで)に使っていたら、どんな結果になっていたかな?」という実験(シミュレーション)をしました。
- コード: この実験に使ったプログラムの設計図(コード)は、誰でも見られるようになっています。
- 注意事項: これは、あくまで昔のデータを使った実験の結果です。だから、未来も同じようにうまくいくとは限りません。お金を実際に使うときは、自分の判断と責任でお願いしますね。