チャートの線で未来がわかる?「ケルトナーチャネル」作戦を試してみました!
「ケルトナーチャネル」っていう作戦で、仮想通貨の取引をしたらどうなるか試してみました。使うのは「ETH/USDT」という仮想通貨のペアです。約1年間、この作戦で取引したらどうなったのか、コンピューターで実験した結果を分かりやすくお話ししますね。ちょっとビックリする結果が出ちゃいました。
導入と前提条件
「ケルトナーチャネル」っていう作戦で、仮想通貨の取引をしたらどうなるか試してみました。使うのは「ETH/USDT」という仮想通貨のペアです。約1年間、この作戦で取引したらどうなったのか、コンピューターで実験した結果を分かりやすくお話ししますね。ちょっとビックリする結果が出ちゃいました。
【検証】戦略のバックテスト概要
- 戦略名: Keltner Channel を使用したトレンド追従戦略
- 対象銘柄: ETH/USDT
- 時間足: 5m
- 期間: 2024-07-21〜2025-08-25(399日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: bybit
Keltner Channel の理論的背景
この作戦は、「値段がいつもの範囲から飛び出したら、その方向にぐんぐん進むかもしれない」という考え方に基づいています。チャートに、値段の平均を表す真ん中の線と、その上下に少し離れた線を2本引きます。値段が上の線を飛び越えたら「もっと上がるかも!」と予想して買い、下の線を下に抜けたら「もっと下がるかも…」と予想して売る、という仕組みです。でも、飛び出したと見せかけてすぐ戻ってくる「だまし」の動きもあるので、注意が必要なんです。
具体的な売買ルール(今回の検証)
エントリー条件
- 値段が、それまで下にあった「上の線」を、ポンと上に飛び越えたとき。
- 値段が、それまで上にあった「下の線」を、ストンと下に抜けちゃったとき。
エグジット条件
- 買った後、目標の利益が出たり、決めておいた損するラインに届いたら取引を終わらせます。
- 売った後、目標の利益が出たり、決めておいた損するラインに届いたら取引を終わらせます。
リスク管理
大きな損をしないための大事なルールです。例えば、「1回の取引で損していいのは、持っているお金の2%まで」のように前もって決めておきます。このルールを守ることで、もし負けが続いても、大切なお金を全部なくしてしまうのを防ぐことができるんです。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでETH/USDTのOHLCVを取得して前処理
- 『Keltner Channel』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 684回 |
勝率 | 27.92% |
平均利益 | 2.15% |
平均損失 | -1.15% |
期待値 | -0.23% |
プロフィットファクター | 0.64 |
最大ドローダウン | 84.89% |
最終リターン | -82.4% |
シャープレシオ | -0.15 |
HODL(Buy&Hold) | 34.47% |
HODL戦略との比較
実装コード(Python)
#!/usr/bin/env python3
"""
ケルトナーチャネル戦略
ATRベースのチャネルを使ったブレイクアウト戦略
"""
import pandas as pd
import numpy as np
def calculate_keltner_signals(df: pd.DataFrame, ema_period: int = 20, atr_period: int = 10,
atr_multiplier: float = 2.0) -> pd.DataFrame:
"""
ケルトナーチャネルシグナルを生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
ema_period : int
EMA期間(デフォルト: 20)
atr_period : int
ATR期間(デフォルト: 10)
atr_multiplier : float
ATR倍率(デフォルト: 2.0)
Returns:
--------
pd.DataFrame
シグナル列が追加されたDataFrame
"""
df = df.copy()
# EMA(中心線)計算
df['kc_middle'] = df['close'].ewm(span=ema_period, adjust=False).mean()
# ATR計算
df['high_low'] = df['high'] - df['low']
df['high_close'] = np.abs(df['high'] - df['close'].shift(1))
df['low_close'] = np.abs(df['low'] - df['close'].shift(1))
df['true_range'] = df[['high_low', 'high_close', 'low_close']].max(axis=1)
df['atr'] = df['true_range'].rolling(window=atr_period).mean()
# ケルトナーチャネル
df['kc_upper'] = df['kc_middle'] + (df['atr'] * atr_multiplier)
df['kc_lower'] = df['kc_middle'] - (df['atr'] * atr_multiplier)
# ブレイクアウトシグナル
df['is_buy'] = (df['close'] > df['kc_upper']) & (df['close'].shift(1) <= df['kc_upper'].shift(1))
df['is_sell'] = (df['close'] < df['kc_lower']) & (df['close'].shift(1) >= df['kc_lower'].shift(1))
# NaN値をFalseに置換
df['is_buy'] = df['is_buy'].fillna(False)
df['is_sell'] = df['is_sell'].fillna(False)
print(f"ケルトナーチャネル: EMA={ema_period}, ATR={atr_period}, 倍率={atr_multiplier}")
print(f"買いシグナル数: {df['is_buy'].sum()}")
print(f"売りシグナル数: {df['is_sell'].sum()}")
return df
なぜこの結果になったのか(3つの理由)
- 1この作戦の勝率は約28%と、ちょっと低めでした。これは、値段が線を飛び越えたと思ったら、すぐに反対方向に戻ってしまう「だまし」の動きが多かったからだと考えられます。
- 2「プロフィットファクター」という成績を表す数字が、1より小さい0.64でした。これは、勝って得たお金よりも、負けて失ったお金の方が多かった、ということを意味します。
- 3一番大きくお金が減ってしまった時の落ち込み(最大DD)が、約85%にもなりました。これは、この作戦を続けると、お金がすごく減ってしまう危険がある、ということです。
この結果から学べる3つの教訓
- 1ただ単に線を越えたからという理由だけで取引すると、「だまし」の動きに引っかかって損をしやすい、ということが分かりました。
- 2勝つ回数が少なくても、1回勝ったときにすごく大きな利益が出れば、全体ではプラスになることもあります。でも、今回の作戦ではそれも難しかったようです。
- 3たくさん取引をしても、ルールがうまく働かないと利益にはつながりません。むしろ、取引のたびにかかる手数料で、お金が減ってしまうこともある、ということを学びました。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金の量を、持っているお金全体の何パーセントまでにするか決めておくことです。例えば「1%まで」と決めておけば、もし負けても大きなダメージを受けずにすみます。
損失が大きくなったときの対処法
もし負けが続いてお金が減ってきたら、一度お休みしたり、もっと安全な作戦に変えたりすることです。この作戦ではお金が大きく減る危険があったので、このルールがとても大切になります。
資金管理の方法
取引全体で、いくらのお金を使って、どれくらいの損までなら大丈夫か、といったお財布全体の管理のことです。長く取引を続けていくためには、このお金の管理が一番大事なことなんです。
改良案の具体的提案
- 値段が線を越えた後、本当にその方向に進む力があるのか、別の方法(例えば、値段の平均線の向きを見るなど)も合わせてチェックしてみる。
- 勝つ回数が少ない分、一度の勝ちでできるだけたくさんの利益を取れるような工夫(例えば、値段が上がっている間はできるだけ取引を続けるルール)を取り入れてみる。
- 取引のタイミングを見る時間(今は5分ごと)を変えてみたり、作戦で使う数字(線の幅など)を調整したりして、もっと良い結果が出る組み合わせを探してみる。
実用性の向上(運用上の注意)
- 今回の実験では、この作戦はあまり良い結果になりませんでした。もし使うなら、このままではなく、もっと良くなるように工夫してから試すのがおすすめです。
- 仮想通貨は値段の動きがとても激しいです。だから、いつも最新の情報をチェックして、大きな損をしないためのルール(リスク管理)をしっかり守ることが大切です。
- 取引には「手数料」というお金がかかります。たくさん取引すると、その分手数料もたくさんかかります。勝っているつもりでも、手数料のせいで利益が減ってしまうこともあるので、注意が必要です。
検証の透明性と信頼性
- データの出所: コンピューターのプログラムと、それで実験した結果のデータを使いました。
- 検証のやり方: 提供されたプログラムを使って、2024年7月21日から2025年8月25日までの「ETH/USDT」の5分ごとの値段の動きで実験しました。
- コード: 実験に使ったプログラムは、記事の中で見ることができます。
- 注意事項: この実験結果は、過去のデータで試したものです。だから、未来も同じようにうまくいくとは限りません。投資をするときは、自分でよく考えて、自分の責任で行ってくださいね。