シェア:

チャートの線で未来がわかる?「ケルトナーチャネル」作戦を試してみました!

「ケルトナーチャネル」っていう作戦で、仮想通貨の取引をしたらどうなるか試してみました。使うのは「ETH/USDT」という仮想通貨のペアです。約1年間、この作戦で取引したらどうなったのか、コンピューターで実験した結果を分かりやすくお話ししますね。ちょっとビックリする結果が出ちゃいました。

取引数
684
勝率
27.92%
最終リターン
-82.40%
最大DD
84.89%

導入と前提条件

「ケルトナーチャネル」っていう作戦で、仮想通貨の取引をしたらどうなるか試してみました。使うのは「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)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数684回
勝率27.92%
平均利益2.15%
平均損失-1.15%
期待値-0.23%
プロフィットファクター0.64
最大ドローダウン84.89%
最終リターン-82.4%
シャープレシオ-0.15
HODL(Buy&Hold)34.47%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/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. 1この作戦の勝率は約28%と、ちょっと低めでした。これは、値段が線を飛び越えたと思ったら、すぐに反対方向に戻ってしまう「だまし」の動きが多かったからだと考えられます。
  2. 2「プロフィットファクター」という成績を表す数字が、1より小さい0.64でした。これは、勝って得たお金よりも、負けて失ったお金の方が多かった、ということを意味します。
  3. 3一番大きくお金が減ってしまった時の落ち込み(最大DD)が、約85%にもなりました。これは、この作戦を続けると、お金がすごく減ってしまう危険がある、ということです。

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

  1. 1ただ単に線を越えたからという理由だけで取引すると、「だまし」の動きに引っかかって損をしやすい、ということが分かりました。
  2. 2勝つ回数が少なくても、1回勝ったときにすごく大きな利益が出れば、全体ではプラスになることもあります。でも、今回の作戦ではそれも難しかったようです。
  3. 3たくさん取引をしても、ルールがうまく働かないと利益にはつながりません。むしろ、取引のたびにかかる手数料で、お金が減ってしまうこともある、ということを学びました。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金の量を、持っているお金全体の何パーセントまでにするか決めておくことです。例えば「1%まで」と決めておけば、もし負けても大きなダメージを受けずにすみます。

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

もし負けが続いてお金が減ってきたら、一度お休みしたり、もっと安全な作戦に変えたりすることです。この作戦ではお金が大きく減る危険があったので、このルールがとても大切になります。

資金管理の方法

取引全体で、いくらのお金を使って、どれくらいの損までなら大丈夫か、といったお財布全体の管理のことです。長く取引を続けていくためには、このお金の管理が一番大事なことなんです。

改良案の具体的提案

  • 値段が線を越えた後、本当にその方向に進む力があるのか、別の方法(例えば、値段の平均線の向きを見るなど)も合わせてチェックしてみる。
  • 勝つ回数が少ない分、一度の勝ちでできるだけたくさんの利益を取れるような工夫(例えば、値段が上がっている間はできるだけ取引を続けるルール)を取り入れてみる。
  • 取引のタイミングを見る時間(今は5分ごと)を変えてみたり、作戦で使う数字(線の幅など)を調整したりして、もっと良い結果が出る組み合わせを探してみる。

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

  • 今回の実験では、この作戦はあまり良い結果になりませんでした。もし使うなら、このままではなく、もっと良くなるように工夫してから試すのがおすすめです。
  • 仮想通貨は値段の動きがとても激しいです。だから、いつも最新の情報をチェックして、大きな損をしないためのルール(リスク管理)をしっかり守ることが大切です。
  • 取引には「手数料」というお金がかかります。たくさん取引すると、その分手数料もたくさんかかります。勝っているつもりでも、手数料のせいで利益が減ってしまうこともあるので、注意が必要です。

検証の透明性と信頼性

  • データの出所: コンピューターのプログラムと、それで実験した結果のデータを使いました。
  • 検証のやり方: 提供されたプログラムを使って、2024年7月21日から2025年8月25日までの「ETH/USDT」の5分ごとの値段の動きで実験しました。
  • コード: 実験に使ったプログラムは、記事の中で見ることができます。
  • 注意事項: この実験結果は、過去のデータで試したものです。だから、未来も同じようにうまくいくとは限りません。投資をするときは、自分でよく考えて、自分の責任で行ってくださいね。

よくある質問

Q.ケルトナーチャネルって、何かのキャラクターの名前?

A.いいえ、キャラクターの名前じゃなくて、チャートという値段のグラフを分析するための道具の名前です。次に値段がどう動くか予想するのに役立つんですよ。

Q.ETH/USDTって、どういう意味?

A.「ETH」はイーサリアムという仮想通貨、「USDT」はテザーという仮想通貨の名前です。「ETH/USDT」は、イーサリアム1枚が何テザーで買えるか、という値段を表しています。

Q.勝率が低いって、全然勝てないってこと?

A.そういうわけでもないんです。勝率というのは、取引した回数のうち、何回勝てたかという割合のことです。たとえ勝つ回数が少なくても、1回勝ったときの利益がとても大きければ、全体としてはプラスになることもあるんですよ。

Q.最大DDって、一番損したときの額?

A.はい、だいたいそんな感じです。正確には、お金が一番増えた時から、その後に一番減ってしまった時までの「下がり幅」のことです。この数字が大きいほど、大きな損をする危険がある作戦だと言えます。

Q.HODLってどういう意味?

A.「HODL(ホドル)」は、仮想通貨などを売ったり買ったりせず、「ずっと持っておくこと」を意味するインターネットの言葉です。今回の実験では、この作戦を使うより、ただ持っているだけの方が結果が良かった、ということになります。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報