シェア:

ビットコイン投資の作戦をのぞいてみよう!「アダプティブ・モメンタム」って何?

ビットコイン(BTC)を使った投資の作戦、「アダプティブ・モメンタム」の結果を見てみましょう。この作戦は、値動きの激しさに合わせて、売買の判断方法を自動で変えるのが特徴です。今回は、約4ヶ月の間に38回取引をしてみて、どうなったかを見ていきます。

取引数
38
勝率
26.32%
最終リターン
-0.30%
最大DD
16.69%

導入と前提条件

ビットコイン(BTC)を使った投資の作戦、「アダプティブ・モメンタム」の結果を見てみましょう。この作戦は、値動きの激しさに合わせて、売買の判断方法を自動で変えるのが特徴です。今回は、約4ヶ月の間に38回取引をしてみて、どうなったかを見ていきます。

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

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

Adaptive Momentum の理論的背景

この作戦が生まれた背景には、「市場はいつも同じじゃない」という考え方があります。特にビットコインは、値段が大きく動くときと、そうでもないときがありますよね。値動きが激しいときは、勢いの変化も速いので、短い時間で判断したほうが良さそうです。逆に、値動きがおだやかなときは、じっくり長い時間で見たほうが、本当の流れがわかりやすいかもしれません。この作戦では、値動きの大きさをヒントにして、勢いをチェックする時間を自動で変えているんです。

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

エントリー条件

  • 「買う」のはいつ?:値段が上がる勢いが、決めておいた基準より強くなったときです。ただし、まだ何も買っていないときだけですよ。
  • 「売る」のはいつ?:値段が下がる勢いが、決めておいた基準より強くなったときです。これも、まだ何も売っていないときだけです。

エグジット条件

  • 取引を終わりにするのはいつ?(その1):『買っている』状態で、値段が上がる勢いが弱まって、売りの合図が出たら、そこで売ります。これで利益を確保したり、損が大きくならないようにします。
  • 取引を終わりにするのはいつ?(その2):『売っている』状態で、値段が上がる勢いが強まって、買いの合図が出たら、そこで買い戻します。これも、利益を確保したり、損を止めたりするためです。

リスク管理

この作戦では、危なくないように、ちゃんとルールを決めています。例えば、一度に使うお金の量を調整して、もし失敗しても大損しないようにしています。また、一度損が出ても、すぐにくよくよせず、次のチャンスを考えて、大きな損が続かないように気をつけています。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数38回
勝率26.32%
平均利益3.58%
平均損失-1.25%
期待値0.02%
プロフィットファクター0.99
最大ドローダウン16.69%
最終リターン-0.3%
シャープレシオ0.02
HODL(Buy&Hold)16.7%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Adaptive Momentum Trading Signal
市場のボラティリティに基づいてモメンタム期間を動的に調整
"""
import pandas as pd
import numpy as np


def calculate_adaptive_momentum_signals(df: pd.DataFrame,
                                      base_period: int = 10,
                                      atr_period: int = 14,
                                      threshold: float = 0.02) -> pd.DataFrame:
    """
    Adaptive Momentum戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    base_period : int
        基本モメンタム期間(デフォルト: 10)
    atr_period : int
        ATR計算期間(デフォルト: 14)
    threshold : float
        シグナル閾値(デフォルト: 0.02)
    
    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()
    
    # ボラティリティレシオ
    df['vol_ratio'] = df['atr'] / df['atr'].rolling(window=50).mean()
    df['vol_ratio'] = df['vol_ratio'].fillna(1.0)
    
    # 適応期間(ボラティリティが高いときは短期、低いときは長期)
    df['adaptive_period'] = (base_period / df['vol_ratio']).round().astype(int)
    df['adaptive_period'] = df['adaptive_period'].clip(lower=5, upper=30)
    
    # シグナル初期化
    df['signal'] = 0
    df['is_buy'] = False
    df['is_sell'] = False
    
    position = 0
    
    for i in range(max(50, atr_period), len(df)):
        period = int(df['adaptive_period'].iloc[i])
        if i < period:
            continue
            
        # モメンタム計算
        momentum = (df['close'].iloc[i] - df['close'].iloc[i-period]) / df['close'].iloc[i-period]
        
        # 買いシグナル
        if position <= 0 and momentum > threshold:
            df.loc[df.index[i], 'is_buy'] = True
            df.loc[df.index[i], 'signal'] = 1
            position = 1
            
        # 売りシグナル
        elif position >= 0 and momentum < -threshold:
            df.loc[df.index[i], 'is_sell'] = True
            df.loc[df.index[i], 'signal'] = -1
            position = -1
        else:
            df.loc[df.index[i], 'signal'] = position
    
    df['signal'] = df['signal'].fillna(0)
    
    return df


def get_strategy_name() -> str:
    """戦略名を返す"""
    return "Adaptive Momentum"


def get_strategy_description() -> str:
    """戦略の説明を返す"""
    return "市場のボラティリティに基づいてモメンタム期間を動的に調整する戦略"

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

  1. 1勝率が低かった(4回に1回くらいしか勝てなかった)のは、ビットコインの値動きが予想しにくくて、ちょっとした値段のブレに振り回されてしまったからかもしれません。
  2. 2「プロフィットファクター(PF)」が0.99と、1より少しだけ小さかったのは、38回も取引したけれど、稼いだお金が、損したお金や手数料をちょっとだけ下回ってしまった、ということです。
  3. 3最終的に、お財布の中身が0.3%減ってしまったのは、利益よりも損が少しだけ大きかったからです。でも、一番調子が悪かったときでも、資産の減りは16.69%に抑えられていました。これは、大損しないための工夫がうまく働いていた、と言えるかもしれません。

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

  1. 1市場の変化に合わせてやり方を変えるのは大事だけど、それがいつも良い結果になるとは限らない、ということがわかりました。
  2. 2勝つ回数が少なくても、一回で大きく勝てば、トータルでプラスになる可能性はあります。(今回はうまくいきませんでしたが…)
  3. 3たくさん取引する作戦だと、一回ごとの儲けや損は小さくなりがちです。だから、手数料みたいな細かいコストも、結果に影響しやすいんだなとわかりました。

リスク管理の具体的手法

取引量の決め方

一度の取引で使うお金は、持っているお金全体の1%や2%みたいに、あらかじめ決めておきます。こうすれば、もし負けても、お財布全体へのダメージを小さくできます。

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

もし損が続いて、決めておいた「ここまでならOK」という金額を超えてしまったら、いったん取引をお休みしたり、使うお金を減らしたりします。パニックになってさらに損をしないためです。

資金管理の方法

取引で出た利益は、全部を次の取引に使うのではなく、一部は貯金するなど、上手にお金を管理します。そうやって、長い目で見てお金を増やしていくことを目指します。

改良案の具体的提案

  • 売り買いの判断基準を、もっと細かく調整したり、そのときの状況に合わせて自動で変えたりすると、もっと良くなるかもしれません。
  • 取引の回数を少し減らして、「これは!」というチャンスだけに絞れば、成績が上がる可能性があります。
  • もし取引で損が出たときに、それ以上損が広がらないようにする「ストップ」のルールを、もっと厳しくすると、一番大きな損をさらに小さくできるかもしれません。

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

  • この作戦は、値動きが激しいビットコインで試されました。でも、もしかしたら他のコインや会社の株でも、うまくいくように調整できるかもしれませんね。
  • 実際に自分のお金で試す前には、必ず昔のデータで「もしこの作戦を使っていたらどうなっていたか?」をたくさん練習(テスト)してください。そして、自分の性格や、どれくらいの損なら我慢できるかに合っているか、よく確認することが大切です。
  • 名前の通り、この作戦は市場の勢いや値動きの激しさがカギです。だから、いつも市場の様子に気を配って、作戦がちゃんと機能しているかを見守ることが大事ですよ。

検証の透明性と信頼性

  • データの出所: この結果は、ビットコイン(BTC/USDT)の1時間ごとの値段のデータ(2025年4月28日〜8月26日分)を使って計算しました。
  • 検証のやり方: この結果が正しいかどうかは、パソコンのプログラムを使って、昔の値段で「もしも」の取引を再現(シミュレーション)して確かめています。
  • コード: この作戦を動かすためのプログラム(Pythonコード)も公開されています。だから、中身を詳しく見たり、自分で試したりすることもできますよ。
  • 注意事項: これはあくまで情報提供で、「投資したほうがいいよ!」と勧めているわけではありません。昔うまくいったからといって、未来もうまくいくとは限りません。投資にはリスクがつきものです。最後は自分でよく考えて、自分の責任で決めてくださいね。

よくある質問

Q.「モメンタム」って何?

A.値段の「勢い」のことだよ。今、値段がグングン上がっているのか、それとも下がっているのか、その元気の良さみたいなものだね。

Q.「ボラティリティ」って、値動きのこと?

A.その通り!「ボラティリティ」は、値段の動きの激しさのこと。ジェットコースターみたいに値段が激しく動くときは「ボラティリティが高い」って言うんだ。

Q.「PF:0.99」って、良いの?悪いの?

A.PFは「利益÷損失」みたいなもので、儲けがどれくらいだったかを表す数字だよ。1より大きいと儲かっていて、1より小さいと損していることになるんだ。0.99は、残念ながら、ほんの少しだけ損が出ている状態だね。

Q.「最大DD:16.69%」って、そんなに損して大丈夫?

A.「最大DD」は、お財布の中身が、一番多かった時から一番減ってしまった時までの下がり幅のこと。この場合、一番調子が良かった時から、最大で16.69%お金が減っちゃった時期があった、ということなんだ。大きい損に見えるけど、これをできるだけ小さく抑えるのが大事なんだよ。

Q.この戦略は、いつ使うのが一番良いの?

A.ビットコインみたいに、値段が活発に動くもので試された作戦だから、そういう市場で使うのが合っているかもしれないね。でも、いつでも、どんなものでもうまくいくとは限らないから、そこは注意が必要だよ。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報