シェア:

ビットコインの値動きの秘密を探ろう!「エルゴディック・オシレーター」って何?

このお話は、ビットコインの「5分ごと」という短い時間の値動きを見て、いつ買っていつ売ればいいかを探す作戦についてです。でも、残念ながら、過去のデータで試してみたら、お金が全部なくなってしまうという結果になりました。この作戦がどんなもので、どうしてうまくいかなかったのか、一緒に見ていきましょう。

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

導入と前提条件

このお話は、ビットコインの「5分ごと」という短い時間の値動きを見て、いつ買っていつ売ればいいかを探す作戦についてです。でも、残念ながら、過去のデータで試してみたら、お金が全部なくなってしまうという結果になりました。この作戦がどんなもので、どうしてうまくいかなかったのか、一緒に見ていきましょう。

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

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

Ergodic Oscillator の理論的背景

この作戦の基本的な考え方は、「値動きの勢い」と「値動きの大きさ」の2つを見ることです。まず、値段がどれくらい変わったかを計算します。次に、その動きをなめらかにした線(移動平均線といいます)を使って、短い期間の勢いと長い期間の勢いを比べます。こうして計算してできた特別な数値が「エルゴディック・オシレーター」です。この数値がマイナスからプラスに変わったら「買い」、プラスからマイナスに変わったら「売り」のサインと考えます。さらに、このサインを分かりやすくするためのもう一本の線(シグナルライン)との差を見ることも大切です。

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

エントリー条件

  • 2本の線の差を表すグラフが、マイナスからプラスに変わった瞬間に「買い」のサインとします。
  • 逆に、プラスからマイナスに変わった瞬間に「売り」のサインとします。

エグジット条件

  • 買った後、もし値段が下がり始めたら、損が大きくならないうちに取引をやめます(これを損切りといいます)。
  • 売った後、もし値段が上がり始めたら、同じように損が大きくならないうちに取引をやめます。

リスク管理

投資では、損をできるだけ小さくすることがとても大切です。この作戦では、もし予想と違う方向に値段が動いてしまっても、決めておいた金額以上の損が出ないように、必ず途中で取引をやめる「損切り」というルールを守ることが重要です。また、1回の取引に使うお金を、持っているお金のほんの一部にすることも、大きな失敗を防ぐために役立ちます。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数10806回
勝率8.25%
平均利益0.44%
平均損失-0.47%
期待値-0.4%
プロフィットファクター0.07
最大ドローダウン100%
最終リターン-100%
シャープレシオ-3.99
HODL(Buy&Hold)67.67%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Ergodic Oscillator Trading Signal Generator
True Strength Indexの変形版でトレンド強度を測定
"""
import pandas as pd
import numpy as np


def calculate_ergodic_signals(df: pd.DataFrame,
                             short_period: int = 5,
                             long_period: int = 14,
                             signal_period: int = 5) -> pd.DataFrame:
    """
    Ergodic Oscillator戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    short_period : int
        短期EMA期間(デフォルト: 5)
    long_period : int
        長期EMA期間(デフォルト: 14)
    signal_period : int
        シグナルライン期間(デフォルト: 5)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # 価格変化
    df['change'] = df['close'] - df['close'].shift(1)
    
    # 絶対値変化
    df['abs_change'] = np.abs(df['change'])
    
    # 第1スムージング(短期)
    df['change_ema1'] = df['change'].ewm(span=short_period, adjust=False).mean()
    df['abs_ema1'] = df['abs_change'].ewm(span=short_period, adjust=False).mean()
    
    # 第2スムージング(長期)
    df['change_ema2'] = df['change_ema1'].ewm(span=long_period, adjust=False).mean()
    df['abs_ema2'] = df['abs_ema1'].ewm(span=long_period, adjust=False).mean()
    
    # Ergodic Oscillator
    df['ergodic'] = (df['change_ema2'] / (df['abs_ema2'] + 0.0001)) * 100
    
    # シグナルライン
    df['signal'] = df['ergodic'].ewm(span=signal_period, adjust=False).mean()
    
    # ヒストグラム
    df['histogram'] = df['ergodic'] - df['signal']
    
    # シグナル生成
    df['hist_prev'] = df['histogram'].shift(1)
    df['is_buy'] = (df['histogram'] > 0) & (df['hist_prev'] <= 0) & df['histogram'].notna()
    df['is_sell'] = (df['histogram'] < 0) & (df['hist_prev'] >= 0) & df['histogram'].notna()
    
    # 不要カラム削除
    df.drop(['change', 'abs_change', 'change_ema1', 'abs_ema1', 
             'change_ema2', 'abs_ema2', 'hist_prev'], axis=1, inplace=True, errors='ignore')
    
    return df

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

  1. 1取引の回数が1万回以上とすごく多いのですが、勝てたのはたったの8%くらいでした。つまり、ほとんどの取引で負けてしまっていたようです。
  2. 21回取引するごとに、平均して少しずつお金が減っていく計算でした。これでは、取引すればするほど損がふくらんでしまいます。
  3. 3最終的に、最初のお金が100%なくなってしまうという結果でした。何もしないでビットコインをずっと持っていたほうが、よっぽど良い結果になっていました。

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

  1. 1たくさん取引すれば儲かるわけではなく、一つ一つの取引でしっかり勝てることが大事だと分かりました。サインがたくさん出ても、そのサインが当たらなければ意味がないんですね。
  2. 2「期待値」のような成績をチェックする数字は、その作戦が本当に使えるかどうかを判断するために、とても重要だと改めて感じました。
  3. 3過去のデータでうまくいかなかった作戦は、そのまま使ってはいけません。設定する数字を変えたり、他の方法と組み合わせたりして、もっと良い方法を探す必要があると学びました。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金の量を、持っているお金全体の1%や2%のように、あらかじめ決めておくことです。こうすれば、もし負けてもダメージは小さくなります。

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

もし連続で負けて、お金が一定の金額まで減ってしまったら、それ以上損をしないように、一度すべての取引をお休みすることです。大きな失敗を防ぐためのブレーキになります。

資金管理の方法

取引に使うお金と、普段の生活に使うお金をしっかり分けることです。利益が出たら、その一部は貯金するなど、上手にお金を管理していく計画のことです。

改良案の具体的提案

  • 作戦で使う数字(短い期間と長い期間の設定など)を、ビットコインの値動きに合うように、細かく調整してみる。
  • この作戦だけでなく、他の分析道具(例えば、移動平均線など)と組み合わせて、ウソのサインにだまされないようにする。
  • 5分ごとの短い動きだけでなく、1時間や4時間といった、もっと大きな時間の流れを見て、大きな流れに逆らわないように取引する。

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

  • この作戦は取引の回数がとても多いので、取引のたびにかかる手数料のことも考えないといけません。手数料で利益がなくなってしまう可能性もあります。
  • 5分ごとの値動きは、変わりやすく予想が難しいです。急に値段が大きく動くこともあるので、注意が必要です。
  • この作戦は、今回のテスト結果がとても悪かったので、もし試すなら、そのまま使ってはいけません。必ず自分で改良して、練習してから、失ってもいいと思える少額で始めるようにしてください。

検証の透明性と信頼性

  • データの出所: このテストは、2024年5月20日から2025年8月25日までの、ビットコインの5分ごとの値動きデータを使って行いました。
  • 検証のやり方: コンピュータープログラムを使って、過去のデータ上で「もしこの作戦を使っていたらどうなっていたか」という練習試合(バックテスト)をしました。その結果として、勝率などの成績を出しています。
  • コード: このテストで使った計算プログラムは公開されています。なので、誰でも同じ結果になるかを確認することができます。
  • 注意事項: このお話は、あくまで過去のデータを使ったテストの結果です。未来も同じようにうまくいくとは限りません。投資は、自分のお金が減ってしまうリスクがあるので、最後は自分でよく考えて判断してくださいね。

よくある質問

Q.そもそも「エルゴディック・オシレーター」って何?

A.値動きにどれくらい「勢い」があるかをはかるための、モノサシのようなものだよ。車のスピードメーターみたいに、勢いが強いか弱いか、どっちの方向に向かっているかを示してくれるんだ。

Q.「勝率8.25%」って、すごく低いんじゃない?

A.うん、その通り。すごく低いんだ。もし100回取引したら、8回しか勝てない計算になるよ。だから、ほとんどの取引で負けちゃっていることになるね。

Q.「PF:0.07」って、どういう意味?

A.これは「儲かったお金 ÷ 損したお金」で計算する成績表みたいなものだよ。1より小さいと損していることになるんだけど、0.07はかなり悪い数字。例えば、100円の損に対して7円しか儲けられなかった、というようなイメージで、取引すればするほど損が増える状態を表しているんだ。

Q.「最大DD:100%」って、どういうこと?

A.これは「今までで一番お金が減ってしまった時の割合」のことだよ。「100%」ということは、一番悪い時には、持っていたお金が全部なくなってしまった、という意味なんだ。とてもリスクが高い状態だったってことだね。

Q.この作戦は、実際にお金を入れて使っても大丈夫?

A.今回のテスト結果を見る限り、このままのやり方で実際にお金を使うのは、とても危険だよ。もし興味があるなら、まずは自分で設定を変えたりして、もっと良い成績が出るように工夫してみてね。そして、試す時も、なくなっても困らないごく少ないお金から始めることを強くおすすめするよ。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報