シェア:

ビットコインの売買タイミング、どうやって決める?「アルティメット・オシレーター」を学ぼう!

ビットコインで利益を出すことを目指す方法の一つ、「アルティメ-ット・オシレーター」を、中学生にも分かるようにやさしく説明します。いつ買って、いつ売ればいいのか、そのヒントが見つかるかもしれません。実際にこの方法を試してみた結果も一緒に見ていきましょう。

取引数
64
勝率
46.88%
最終リターン
-15.70%
最大DD
20.51%

導入と前提条件

ビットコインで利益を出すことを目指す方法の一つ、「アルティメ-ット・オシレーター」を、中学生にも分かるようにやさしく説明します。いつ買って、いつ売ればいいのか、そのヒントが見つかるかもしれません。実際にこの方法を試してみた結果も一緒に見ていきましょう。

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

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

Ultimate Oscillator の理論的背景

この方法の根っこには、「値段の動きは、短い時間で見るときと、長い時間で見るときで違うよね」という考え方があります。例えば、1時間だけ見ると急に上がっているけど、1週間ずっと見ると実は下がっている、なんてこともあります。アルティメット・オシレーターは、この短い・普通・長いの3つの時間の動きを全部まとめて計算することで、より正確な「全体の勢い」を測ろうとします。たとえば、短い時間の勢いが強くなって、長い時間の勢いもそれに続いてきたら「買うチャンスかも!」、逆に勢いがなくなってきたら「売ったほうがいいかも?」と考えるんです。

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

エントリー条件

  • 値段の勢いを示す「元気メーター」みたいな数字があります。このメーターが30より下に下がった後、また上がり始めたら「売られすぎたから、これから上がるかも!」と考えて買うタイミングのサインです。
  • メーターの数字が、さっき見た時よりも大きくなっていたら、買うことを考え始めます。

エグジット条件

  • 逆に、元気メーターの数字が70より上に上がった後、下がり始めたら「買われすぎたから、これから下がるかも!」と考えて売る(手じまいする)タイミングのサインです。
  • メーターの数字が、さっき見た時よりも小さくなっていたら、売ることを考え始めます。

リスク管理

もし損が大きくなりすぎたら大変なので、「ここまで損したら一度やめる」というラインをあらかじめ決めておきます。そのラインを越えたら、無理せず取引をお休みすることも大切です。また、一度にたくさんのお金を賭けるのではなく、少しずつ試してみるのが基本です。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数64回
勝率46.88%
平均利益0.89%
平均損失-1.27%
期待値-0.26%
プロフィットファクター0.61
最大ドローダウン20.51%
最終リターン-15.7%
シャープレシオ-0.34
HODL(Buy&Hold)17.71%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Ultimate Oscillator Trading Signal
複数期間を統合したオシレーター
"""
import pandas as pd
import numpy as np


def calculate_ultimate_oscillator_signals(df: pd.DataFrame,
                                       period1: int = 7,
                                       period2: int = 14,
                                       period3: int = 28) -> pd.DataFrame:
    """
    Ultimate Oscillator戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period1 : int
        短期期間(デフォルト: 7)
    period2 : int
        中期期間(デフォルト: 14)
    period3 : int
        長期期間(デフォルト: 28)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # Buying Pressure
    df['bp'] = df['close'] - df[['low', 'close']].shift(1).min(axis=1)
    
    # True Range
    df['tr'] = df[['high', 'close']].shift(1).max(axis=1) - df[['low', 'close']].shift(1).min(axis=1)
    
    # Average for each period
    df['avg1'] = df['bp'].rolling(window=period1).sum() / df['tr'].rolling(window=period1).sum()
    df['avg2'] = df['bp'].rolling(window=period2).sum() / df['tr'].rolling(window=period2).sum()
    df['avg3'] = df['bp'].rolling(window=period3).sum() / df['tr'].rolling(window=period3).sum()
    
    # Ultimate Oscillator
    df['uo'] = 100 * ((4 * df['avg1'] + 2 * df['avg2'] + df['avg3']) / 7)
    
    # シグナル初期化
    df['signal'] = 0
    df['is_buy'] = False
    df['is_sell'] = False
    
    position = 0
    
    for i in range(period3, len(df)):
        # 買いシグナル
        if position <= 0 and df['uo'].iloc[i] < 30 and df['uo'].iloc[i] > df['uo'].iloc[i-1]:
            df.loc[df.index[i], 'is_buy'] = True
            df.loc[df.index[i], 'signal'] = 1
            position = 1
            
        # 売りシグナル
        elif position >= 0 and df['uo'].iloc[i] > 70 and df['uo'].iloc[i] < df['uo'].iloc[i-1]:
            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 "Ultimate Oscillator"


def get_strategy_description() -> str:
    """戦略の説明を返す"""
    return "複数期間を統合したオシレーター戦略"

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

  1. 1今回の実験では、残念ながらお金は増えませんでした。1回取引するごとに、平均して0.26%ずつ損をしてしまう計算でした。
  2. 2勝率は約47%でした。これは、100回取引したら、53回は負けてしまうということです。半分以上負けているので、買う・売るのタイミングが少しずれていたのかもしれません。
  3. 3一番うまくいかなかった時には、お金が一時的に20.51%も減ってしまいました(これを最大DDと言います)。最終的には、最初のお金が15.7%減って終わりました。

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

  1. 1「アルティメット・オシレーター」は、考え方としては良さそうに見えても、実際にやってみると必ずうまくいくわけではない、ということが分かりました。
  2. 2元気メーターの「30」や「70」といった基準にする数字を変えたりすると、結果が良くなる可能性もあることが分かりました。
  3. 3どんなに良い方法を使っても、投資では損をしてしまう可能性があることを学びました。昔のデータが良かったからといって、未来も同じ結果になるとは限らないんですね。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金は、持っているお金全体の1%から2%くらいに抑えるのがおすすめです。例えば、もし1万円持っていたら、1回に使うのは100円から200円くらいです。こうすれば、もし失敗しても大きなダメージを受けずにすみます。

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

もし損が続いて、持っているお金が10%減ってしまったら(例えば1万円が9千円になったら)、一度全部の取引をやめて、相場の様子を見る、というルールを作るのも良い方法です。

資金管理の方法

持っているお金を全部投資に使うのではなく、一部だけを使うようにしましょう。そして、もし利益が出たら、その一部を次の投資に使うこともできますが、無理はしないようにしましょう。

改良案の具体的提案

  • 元気メーターが30より下がってから上がるとき、買う基準の数字をもう少し低く設定すれば、もっと早く買うチャンスを見つけられるかもしれません。
  • 元気メーターが70より上がってから下がるとき、売る基準の数字をもう少し高く設定すれば、もう少し利益を伸ばしてから売れるかもしれません。
  • この方法だけでなく、他の道具(例えば、値段の平均を表す線など)も一緒に使って、「本当に今がチャンスかな?」とダブルチェックする方法を考えてみます。

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

  • この方法を試すなら、まずはお小遣いの範囲で、本当に少しの金額から始めてみましょう。慣れてきたら、少しずつ金額を増やしていくのが安全です。
  • 使う数字の設定(例えば「30」や「70」)は、いつも同じものがベストとは限りません。時々、今のビットコインの動きに合っているか見直してみると良いかもしれません。
  • この方法だけに頼らず、世界でどんなニュースが流れているかなど、他の情報も参考にしながら、最後は自分で考えて判断することがとても大切です。

検証の透明性と信頼性

  • データの出所: この実験では、インターネットで公開されている、過去のビットコインの値段のデータを使いました。
  • 検証のやり方: パソコンのプログラムを使って、「もし昔、このやり方で投資していたら、結果はどうなっていたかな?」という実験(シミュレーション)をしました。
  • コード: この実験で使ったプログラムがどんなものかは、見ようと思えば誰でも見られるようになっています。
  • 注意事項: この記事は、あくまで昔のデータを使った実験の結果です。未来も同じようにお金が増えることを約束するものではありません。投資をするときは、自分でよく考えて、損してしまう可能性もあることを忘れないでくださいね。

よくある質問

Q.「アルティメット・オシレーター」って、何かの呪文?

A.いいえ、呪文ではありません!ビットコインみたいなものの値段が、今どれくらいの勢いで上がったり下がったりしているかを示す「道具」の名前です。この道具が出す数字を見て、買うか売るかのヒントにするんです。

Q.「BTC/USDT」って何?

A.「BTC」はビットコインのことです。「USDT」はテザーといって、1枚がだいたい1アメリカドルと同じくらいの価値になるように作られた特別なコインです。「BTC/USDT」は、「1ビットコインは、何テザーで買えますか?」という値段を表しています。

Q.「1h」って、1時間のこと?

A.その通りです。「1h」は「1時間足(あし)」と読みます。値段の動きを表すグラフの1本が、1時間分の動きを表している、という意味です。この実験では、1時間ごとの値段のデータを使いました。

Q.「最大DD」って、一番ひどい状態のこと?

A.はい、そんなイメージです。投資を始めてから、お金が一番大きく減ってしまった時の、その割合のことです。今回の「20.51%」というのは、一番うまくいかなかった時、投資したお金が一時的に約2割も減ってしまった、ということです。

Q.この方法を使えば絶対儲かるの?

A.残念ながら、どんな方法でも「絶対に儲かる」というものはありません。今回の実験でも、結果的には損をしてしまいました。投資には必ずリスク(損をする可能性)があるので、それをよく理解しておくことが大切です。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報