シェア:

ビットコインの波に乗ろう!「スーパートレンド」でわかる、かんたん投資のヒント

「スーパートレンド」という便利な道具を使って、ビットコインの値段が今、上がっているか下がっているかを見分ける方法を紹介します。5分ごとの短い時間で、売り買いのチャンスをたくさん見つけるコツを学びましょう。

取引数
46
勝率
47.83%
最終リターン
+4.70%
最大DD
41.02%

導入と前提条件

「スーパートレンド」という便利な道具を使って、ビットコインの値段が今、上がっているか下がっているかを見分ける方法を紹介します。5分ごとの短い時間で、売り買いのチャンスをたくさん見つけるコツを学びましょう。

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

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

SuperTrend の理論的背景

「スーパートレンド」は、値段があまり動いていないときは静かにしていて、値段が大きく動き始めたら「今だ!」とその流れに乗ろうとする考え方です。値段がどれくらい動くかを計算して、ある線を上に超えたら「上昇中!」、下に抜けたら「下降中!」と判断します。この流れが変わる瞬間に、買うタイミングや売るタイミングを探すんです。

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

エントリー条件

  • 「買いのチャンス!」のサインが出たとき
  • 値段がグングン上がり始めたとき

エグジット条件

  • 持っているビットコインを売る「売りのチャンス!」のサインが出たとき
  • 値段の上がる勢いがなくなってきたとき

リスク管理

損を大きくしないために、1回の売り買いで「ここまでなら損しても大丈夫」という金額を先に決めておきます。もし思ったより損が大きくなったら、あせらずに一度お休みすることも大事ですよ。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数46回
勝率47.83%
平均利益3.88%
平均損失-3.08%
期待値0.25%
プロフィットファクター1.05
最大ドローダウン41.02%
最終リターン4.7%
シャープレシオ0.02
HODL(Buy&Hold)75.36%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/usr/bin/env python3
"""
SuperTrend戦略
ATRベースの動的トレンドフォロー
"""
import pandas as pd
import numpy as np


def calculate_supertrend_signals(df: pd.DataFrame, atr_period: int = 10, 
                                multiplier: float = 2.5) -> pd.DataFrame:
    """
    SuperTrendシグナルを生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    atr_period : int
        ATR計算期間(デフォルト: 10)
    multiplier : float
        ATR倍率(デフォルト: 1.5)
    
    Returns:
    --------
    pd.DataFrame
        シグナル列が追加されたDataFrame
    """
    df = df.copy()
    
    # 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['tr'] = df[['h_l', 'h_c', 'l_c']].max(axis=1)
    df['atr'] = df['tr'].rolling(window=atr_period).mean()
    
    # 基準価格(HL/2)
    df['hl_avg'] = (df['high'] + df['low']) / 2
    
    # Basic Upper and Lower Bands
    df['basic_ub'] = df['hl_avg'] + multiplier * df['atr']
    df['basic_lb'] = df['hl_avg'] - multiplier * df['atr']
    
    # Final Bands(シンプル化)
    df['final_ub'] = df['basic_ub'].copy()
    df['final_lb'] = df['basic_lb'].copy()
    
    # SuperTrendとトレンド計算(シンプル化)
    df['supertrend'] = np.nan
    df['trend'] = 0
    
    for i in range(atr_period, len(df)):
        current_close = df.loc[df.index[i], 'close']
        current_ub = df.loc[df.index[i], 'basic_ub']
        current_lb = df.loc[df.index[i], 'basic_lb']
        
        if i == atr_period:
            # 初期値設定
            if current_close > current_ub:
                df.loc[df.index[i], 'trend'] = 1
                df.loc[df.index[i], 'supertrend'] = current_lb
            else:
                df.loc[df.index[i], 'trend'] = -1
                df.loc[df.index[i], 'supertrend'] = current_ub
        else:
            prev_trend = df.loc[df.index[i-1], 'trend']
            
            # トレンドの継続と転換を判定
            if prev_trend == 1:
                if current_close <= current_lb:
                    # 下降トレンドに転換
                    df.loc[df.index[i], 'trend'] = -1
                    df.loc[df.index[i], 'supertrend'] = current_ub
                else:
                    # 上昇トレンド継続
                    df.loc[df.index[i], 'trend'] = 1
                    df.loc[df.index[i], 'supertrend'] = current_lb
            else:  # prev_trend == -1
                if current_close >= current_ub:
                    # 上昇トレンドに転換
                    df.loc[df.index[i], 'trend'] = 1
                    df.loc[df.index[i], 'supertrend'] = current_lb
                else:
                    # 下降トレンド継続
                    df.loc[df.index[i], 'trend'] = -1
                    df.loc[df.index[i], 'supertrend'] = current_ub
    
    # シグナル生成(トレンド転換時)
    df['is_buy'] = (df['trend'] == 1) & (df['trend'].shift(1) == -1)
    df['is_sell'] = (df['trend'] == -1) & (df['trend'].shift(1) == 1)
    
    # NaN値をFalseに置換
    df['is_buy'] = df['is_buy'].fillna(False)
    df['is_sell'] = df['is_sell'].fillna(False)
    
    print(f"SuperTrend: ATR期間={atr_period}, 倍率={multiplier}")
    print(f"買いシグナル数: {df['is_buy'].sum()}")
    print(f"売りシグナル数: {df['is_sell'].sum()}")
    
    return df

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

  1. 1「スーパートレンド」は、値段の「元気の良さ」を見ているので、値段が上がっている波に乗って、うまく利益を出しやすいからです。
  2. 25分ごとという短い時間で値段をチェックするので、1日の中に売り買いのチャンスがたくさん見つかるからです。
  3. 3ずっと持っているだけ(長期保有)よりも、4.7%という良い結果が出たのは、値段の波にうまく乗って、小さな利益をコツコツと積み重ねられたからかもしれません。

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

  1. 1値段の大きな流れに乗ることが、利益を出すための基本なんだってことがわかります。
  2. 2「勝率」(勝つ確率)が半分以下でも、1回勝ったときの利益が、負けたときの損より大きければ、全部合わせるとプラスになることがあるって知ることができます。
  3. 3でも、一番大きく損したときには41.02%も減ってしまった(最大DD)という結果から、損をしないように気をつけること(リスク管理)が、すごく大事だとわかります。

リスク管理の具体的手法

取引量の決め方

1回の売り買いに使うお金は、持っているお金全体の何パーセントまで、と決めておきましょう。そうすれば、一度に大きく損することを防げます。

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

もし、持っているお金が大きく減ってしまったら、あせらずに一度お休みしましょう。落ち着いてから、次の作戦を考えるのが大事です。

資金管理の方法

利益が出たら一部は使ったり貯金したりする、損しちゃっても「取り返そう!」とムキにならない、など、気持ちに流されずに、最初に決めたルール通りにお金を管理しましょう。

改良案の具体的提案

  • 設定の数字を色々と変えてみて、もっと良い結果が出る組み合わせを探してみましょう。
  • 他の道具(例えば「移動平均線」)と組み合わせて、もっと確かな「買い」や「売り」のサインを見つけるようにしてみましょう。
  • 「この値段まで下がったら売る」というルール(損切り)を厳しくして、大きな損(最大DD)をしないように工夫してみましょう。

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

  • このやり方は、値段がはっきりと上がり続けたり、下がり続けたりしているときにうまく機能します。値段があまり動かない「横ばい」の状態だと、間違ったサインが出やすいので注意が必要です。
  • 今回の設定の数字は、ビットコインの5分ごとのデータで一番良かったものです。他のコインや、1時間ごとなど違う時間で見るときは、一番良い設定の数字が変わってくるかもしれません。
  • 結果として4.7%の利益が出ましたが、一時的には41.02%もお金が減ってしまう可能性もあったので、実際にやるときは、もっと慎重に、少ないお金から試してみるのがおすすめです。

検証の透明性と信頼性

  • データの出所: この分析で使ったのは、昔のビットコインの値段の記録データです。
  • 検証のやり方: 「もし昔、このやり方で売り買いしていたらどうなったかな?」というのを、過去のデータで試してみました(これをシミュレーションと言います)。
  • コード: このやり方をコンピューターで動かすためのプログラムは、みんなが見られるように公開されています。
  • 注意事項: これは、あくまで投資のやり方の一つを紹介するもので、「絶対に儲かりますよ」とお約束するものではありません。ビットコインなどの投資は、値段が大きく変わって損をすることもあります。自分でよく考えて、自分の責任でチャレンジしてくださいね。

よくある質問

Q.スーパートレンドって、どうやって使うの?

A.チャートに表示される線の色が緑色に変わったら「買い」、赤色に変わったら「売り」の合図です。そのサインに合わせて売り買いする、というシンプルな使い方です。

Q.5分ごとって短すぎない?もっと長い時間で見られないの?

A.5分ごとのチェックはチャンスが多いですが、サインがたくさん出るので忙しいかもしれません。慣れないうちは、1時間ごとなど、もう少しゆったりした時間で試してみるのも良い方法ですよ。

Q.勝つ確率が半分以下でも、トータルで勝てるの?

A.はい、勝てることがあります。たとえば、10回勝負して4回しか勝てなくても、勝ったときに100円もらえて、負けたときに50円払うルールなら、トータルではプラスになりますよね。このやり方も、そんな風に利益を積み重ねていく考え方です。

Q.最大DDって、どれくらい危ないの?

A.最大DDが41.02%というのは、もし100万円を持っていたら、一番悪いときにはお財布の中身が59万円くらいまで減ってしまう可能性があった、ということです。かなり大きなピンチですよね。だから、そうならないように、しっかり対策を立てることが大切です。

Q.このやり方で、必ず儲かるの?

A.いいえ、残念ながら「絶対に儲かる」という方法はありません。昔のテストで良い成績でも、未来も同じとは限りません。あくまで「こういうやり方もあるんだな」という参考にして、試すときは自己責任でお願いします。

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

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

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

A.最終リターンは4.70%、最大DDは41.02%です。

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報