シェア:

値動きの勢いで未来はわかる?ある投資作戦の失敗から学ぼう!

今回は、「モメンタムオシレーター」という、値動きの勢いをはかる道具を使った投資の作戦がどうだったか、その結果をみんなにも分かりやすく説明します。この作戦は、「ソラナ(SOL)」という暗号資産(仮想通貨)で試されました。考え方はとってもシンプルで、「値段が上がる勢いが強ければ買い、下がる勢いが強ければ売る」というものです。

取引数
4876
勝率
17.99%
最終リターン
-100.00%
最大DD
100.00%

導入と前提条件

今回は、「モメンタムオシレーター」という、値動きの勢いをはかる道具を使った投資の作戦がどうだったか、その結果をみんなにも分かりやすく説明します。この作戦は、「ソラナ(SOL)」という暗号資産(仮想通貨)で試されました。考え方はとってもシンプルで、「値段が上がる勢いが強ければ買い、下がる勢いが強ければ売る」というものです。

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

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

Momentum Oscillator の理論的背景

この作戦の根っこにある考え方は、「勢いはしばらく続くことが多い」というものです。もし、値段がグングン上がっていたら、この後もまだ上がるかもしれない。逆に、どんどん下がっていたら、この後もまだ下がるかもしれない。そんなふうに考えます。具体的には、過去10個分の値段と今の値段を比べて勢いを計算し、その勢いの変化をなめらかな線グラフにします。その線が、基準となるゼロのラインを上向きに突き抜けたら「買い」、下向きに突き抜けたら「売り」のサインとしました。つまり、「イケイケだ!」という流れに乗ろうとする作戦なんです。

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

エントリー条件

  • 値段の勢いを表すグラフの線が、ゼロのラインを上に突き抜けたとき(上がる勢いが出てきたので買うタイミングです)
  • 勢いのグラフが、ゼロのラインよりも上にいるとき(上がる勢いが続いているので買うタイミングです)

エグジット条件

  • 値段の勢いを表すグラフの線が、ゼロのラインを下に突き抜けたとき(上がる勢いが弱まってきたので売るタイミングです)
  • 勢いのグラフが、ゼロのラインよりも下にいるとき(勢いがなくなってきたので売るタイミングです)

リスク管理

この作戦には、とても大事なルールがありませんでした。それは、「ここまで損したらあきらめて売る(損切り)」というルールです。このルールがなかったので、一度損が出始めると、どこまでも損がふくらんでしまう可能性がありました。最終的に、用意したお金が全部なくなってしまったのは、これが一番大きな原因だと考えられます。大きな損を避けるためには、「損切り」のルールは絶対に必要なんです。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数4876回
勝率17.99%
平均利益0.91%
平均損失-0.68%
期待値-0.4%
プロフィットファクター0.35
最大ドローダウン100%
最終リターン-100%
シャープレシオ-1.39
HODL(Buy&Hold)42.01%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/usr/bin/env python3
"""
モメンタムオシレーター戦略
価格の変化率(モメンタム)でトレンド転換を検出
"""
import pandas as pd
import numpy as np


def calculate_momentum_signals(df: pd.DataFrame, momentum_period: int = 10, 
                              threshold: float = 0.0) -> pd.DataFrame:
    """
    モメンタムオシレーターシグナルを生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    momentum_period : int
        モメンタム計算期間(デフォルト: 10)
    threshold : float
        シグナル閾値(デフォルト: 0.0)
    
    Returns:
    --------
    pd.DataFrame
        シグナル列が追加されたDataFrame
    """
    df = df.copy()
    
    # モメンタム計算(現在価格 - N期間前価格)
    df['momentum'] = df['close'] - df['close'].shift(momentum_period)
    
    # モメンタム変化率(%)
    df['momentum_pct'] = (df['momentum'] / df['close'].shift(momentum_period)) * 100
    
    # モメンタムの移動平均(スムージング)
    df['momentum_ma'] = df['momentum'].rolling(window=3).mean()
    
    # シグナル生成(ゼロラインクロス)
    df['is_buy'] = (
        (df['momentum_ma'] > threshold) & 
        (df['momentum_ma'].shift(1) <= threshold)
    )
    
    df['is_sell'] = (
        (df['momentum_ma'] < -threshold) & 
        (df['momentum_ma'].shift(1) >= -threshold)
    )
    
    # NaN値をFalseに置換
    df['is_buy'] = df['is_buy'].fillna(False)
    df['is_sell'] = df['is_sell'].fillna(False)
    
    print(f"モメンタムオシレーター: 期間={momentum_period}, 閾値={threshold}")
    print(f"買いシグナル数: {df['is_buy'].sum()}")
    print(f"売りシグナル数: {df['is_sell'].sum()}")
    
    return df

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

  1. 1勝った確率が約18%と、とても低かったです。これは、100回取引したら82回は失敗してしまった、ということです。作戦が、値動きの変わり目をうまく見つけられなかったことが分かります。
  2. 2「期待値」という、1回あたりの取引で平均どれくらい損するか得するかを示す数字が、マイナス0.4%でした。これは、取引を1回するたびに、使ったお金の0.4%ずつ平均して損していた、ということです。つまり、やればやるほどお金が減っていく状態でした。
  3. 3最終的に用意したお金が全部なくなり(最終損益-100%)、一番損した時も全部なくなっていた(最大DD100%)というのは、「損切り」のような、損がふくらむのを止める仕組みがなかったからだと考えられます。

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

  1. 1値動きの「勢い」だけに注目しても、うまくいくとは限らないと分かりました。勢いがあるように見えても、急に反対に動くことはよくあります。
  2. 2取引の回数が4876回とすごく多かったのに、結局お金が全部なくなってしまいました。これは、取引の回数が多ければ良いというわけではない、ということを教えてくれています。むしろ、意味のない取引が多かったのかもしれません。
  3. 3勝つ確率が低くても、一回でとても大きな利益が出れば、トータルでプラスになることもあります。でも、この作戦は勝つ確率も低く、一回あたりの平均的な結果もマイナスだったので、大きな損につながってしまいました。

リスク管理の具体的手法

取引量の決め方

この作戦では、1回の取引にどれくらいのお金を使うか、というルールが決まっていなかったようです。もし、持っているお金のほとんどを一度の取引で使ってしまうと、失敗した時に大損してしまいます。ふつうは、「1回の取引で損してもいいのは、持っているお金の2%まで」のように決めて、それに合わせて使う金額を調整します。

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

一番お金が減った時(最大DD)に100%になってしまったのは、損がどんどん大きくなっても、それを止める仕組みがなかったからです。例えば、「持っているお金が20%減ったら、一度すべての取引をやめて作戦を見直す」といったルールが必要です。

資金管理の方法

この作戦には、お金をどう守って、どう使っていくかという「資金管理」の考え方がありませんでした。だから、取引を繰り返すうちにお金が減っていき、最後にはゼロになってしまったと考えられます。長く取引を続けるためには、お金を守るためのルールがとても大切です。

改良案の具体的提案

  • まず一番大事なのは、「損切り」のルールを入れることです。例えば、「買値から5%下がったら、あきらめて売る」といったルールを決めれば、一度の失敗で大きなお金を失うのを防げます。
  • 他の道具(例えば、値段の平均的な動きを示す「移動平均線」など)と組み合わせることで、もっと成功しやすいタイミングが見つかるかもしれません。勢いだけでなく、全体の流れが上向きなのか下向きなのかも見てみましょう。
  • 作戦で使う数字(例えば、勢いを計算する期間など)をいろいろ変えて試したり、違う時期のデータでテストしたりすることで、もっと良い結果が出るようになるかもしれません。

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

  • この作戦は、過去のデータで試したら、とても悪い結果になりました。このまま本番のお金で使うのは、すごく危険です。
  • もしこの作戦を使いたいなら、必ず「損切り」のルールなどを追加して、うまくいくかどうか、しっかりテストしてからにしてください。そのまま使うと、お金を全部なくす可能性がとても高いです。
  • 暗号資産の取引は、値段の動きがとても激しいです。挑戦するときは、必ず「なくなっても生活に困らないお金」で、危険なものだと理解しながらやりましょう。

検証の透明性と信頼性

  • データの出所: この作戦は、過去の「ソラナ(SOL)」という暗号資産の5分ごとの値段のデータを使って、うまくいくかどうかをテストしました。
  • 検証のやり方: 2024年8月4日から2025年8月25日までの約1年間のデータを使って、「もしこの作戦で取引していたら、どうなっていたか」をコンピューターで試してみました。その結果を分析しています。
  • コード: このテストに使われた計算のプログラム(Pythonという言葉で書かれています)は、誰でも見ることができます。
  • 注意事項: この結果は、あくまで過去のデータで試したものです。未来も同じようにうまくいくとは限りません。投資には、お金が減ってしまう危険が必ずあります。自分でよく考えて判断してくださいね。

よくある質問

Q.「モメンタムオシレーター」って、どんな仕組みなの?

A.「モメンタム」は「勢い」っていう意味だよ。今の値段と、例えば10分前の値段を比べて、どれくらい上がったり下がったりしたか、その勢いを数字にしたものなんだ。その勢いが、ある基準のラインを越えたら「買いのチャンス!」、下回ったら「売りのチャンス!」と教えてくれる道具のことだよ。

Q.勝率18%って、かなりヤバくない?

A.うん、かなり厳しい結果だね。100回取引したら、82回は負けて損しちゃったってことだから。この作戦は、うまくいくことの方がずっと少なかった、ってことがわかるよ。

Q.「期待値がマイナス」ってどういうこと?

A.「期待値」っていうのは、1回の取引で平均してどれくらいもうかるか(または損するか)を表す数字なんだ。これがマイナスだと、「取引すればするほど、平均的にはお金が減っていく」っていう意味になるんだよ。

Q.結果のところにある「PF:0.35」って何?

A.「PF」は「プロフィットファクター」の略で、もうかった金額の合計と、損した金額の合計のバランスを見るための数字だよ。もしPFが「2」なら、損した金額の2倍もうかったってこと。これが「1」より小さいと、もうけより損の方が大きかったって意味になるんだ。0.35は、もうけよりも損の方がずっと大きかったことを示しているんだよ。

Q.この作戦、どうやったらうまくいくようになるの?

A.一番大事なのは、「損切り」のルールを決めることだね。「買値から5%下がったら売る」みたいに、あらかじめあきらめるラインを決めておけば、お金が全部なくなるような最悪の事態は防げるよ。あとは、勢いだけじゃなくて、他の見方(例えば、世の中全体の景気の流れとか)も合わせて考えると、もっとうまくいくようになるかもしれないね。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報