シェア:

ビットコインの売り時・買い時はわかる?「オーサム・オシレーター」を試してみた!

この作戦は、「オーサム・オシレーター」という道具を使って、ビットコインの値段の上がり下りの「勢い」を見る方法です。5分ごとの細かい値動きのグラフで、いつ買っていつ売ればいいのか、そのタイミングを探ってみます。中学生のみんなにもわかるように、売り買いのヒントを解説しますね。

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

導入と前提条件

この作戦は、「オーサム・オシレーター」という道具を使って、ビットコインの値段の上がり下りの「勢い」を見る方法です。5分ごとの細かい値動きのグラフで、いつ買っていつ売ればいいのか、そのタイミングを探ってみます。中学生のみんなにもわかるように、売り買いのヒントを解説しますね。

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

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

Awesome Oscillator の理論的背景

この作戦は、「値段の動きには『勢い』があって、その勢いの変化を見れば、これからどう動くかのヒントが見つかるかもしれない」という考えが元になっています。オーサム・オシレーターは、短い時間と長い時間の勢いを比べることで、今の市場の本当の勢いをキャッチしようとします。勢いがプラスになれば「買い」のパワーが強いサイン、マイナスになれば「売り」のパワーが強いサイン、というふうに考えます。また、グラフが特別な形になったら、値段の流れが変わる合図かもしれない、と考えて売り買いのタイミングをはかります。

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

エントリー条件

  • 勢いがマイナスからプラスに変わった時(ゼロの線を上に超えた時)に買う。
  • 勢いのグラフが下がりきって、お皿の底みたいな形になって、また上がり始めた時に買う。

エグジット条件

  • 勢いがプラスからマイナスに変わった時(ゼロの線を下に超えた時)に売る。
  • 勢いのグラフが上がりきって、お皿をひっくり返したみたいな形になって、また下がり始めた時に売る。
  • 目標の利益が出たら売って、利益を確定させる。
  • 決めておいた額まで損が出たら売って、それ以上損が大きくならないようにする。

リスク管理

一気にたくさんのお金を使わず、もしなくなっても大丈夫と思える少ない金額で挑戦します。もし予想と反対に値段が動いて損をしてしまった時も、被害が広がらないように「ここまで損したらやめる」というルールをあらかじめ決めておきます。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数9148回
勝率7.03%
平均利益0.43%
平均損失-0.46%
期待値-0.4%
プロフィットファクター0.06
最大ドローダウン100%
最終リターン-100%
シャープレシオ-4.36
HODL(Buy&Hold)75.36%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/usr/bin/env python3
"""
Awesome Oscillator戦略
Bill Williamsの開発したモメンタムインジケーター
"""
import pandas as pd
import numpy as np


def calculate_awesome_signals(df: pd.DataFrame, fast_period: int = 5, slow_period: int = 34) -> pd.DataFrame:
    """
    Awesome Oscillatorシグナルを生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    fast_period : int
        短期SMA期間(デフォルト: 5)
    slow_period : int
        長期SMA期間(デフォルト: 34)
    
    Returns:
    --------
    pd.DataFrame
        シグナル列が追加されたDataFrame
    """
    df = df.copy()
    
    # Median Price(中央値価格)
    df['median_price'] = (df['high'] + df['low']) / 2
    
    # Awesome Oscillator計算
    df['ao_fast'] = df['median_price'].rolling(window=fast_period).mean()
    df['ao_slow'] = df['median_price'].rolling(window=slow_period).mean()
    df['ao'] = df['ao_fast'] - df['ao_slow']
    
    # Twin Peaks(ツインピークス)パターン検出
    # Saucer(ソーサー)シグナル
    df['ao_color'] = np.where(df['ao'] > df['ao'].shift(1), 'green', 'red')
    
    # シグナル生成
    # ゼロラインクロス
    df['zero_cross_buy'] = (df['ao'] > 0) & (df['ao'].shift(1) <= 0)
    df['zero_cross_sell'] = (df['ao'] < 0) & (df['ao'].shift(1) >= 0)
    
    # ソーサーシグナル(色の変化で判定)
    df['saucer_buy'] = (
        (df['ao'] > df['ao'].shift(1)) &  # AOが上昇
        (df['ao'].shift(1) < df['ao'].shift(2))  # 前回が下降
    )
    
    df['saucer_sell'] = (
        (df['ao'] < df['ao'].shift(1)) &  # AOが下降
        (df['ao'].shift(1) > df['ao'].shift(2))  # 前回が上昇
    )
    
    # 総合シグナル
    df['is_buy'] = df['zero_cross_buy'] | df['saucer_buy']
    df['is_sell'] = df['zero_cross_sell'] | df['saucer_sell']
    
    # NaN値をFalseに置換
    df['is_buy'] = df['is_buy'].fillna(False)
    df['is_sell'] = df['is_sell'].fillna(False)
    
    print(f"Awesome Oscillator: 短期={fast_period}, 長期={slow_period}")
    print(f"買いシグナル数: {df['is_buy'].sum()}")
    print(f"売りシグナル数: {df['is_sell'].sum()}")
    
    return df

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

  1. 1この作戦を試したところ、勝てる確率が100回中7回くらいと、とても低かったです。ほとんどの取引で負けてしまったので、最終的に使ったお金が全部なくなってしまいました。
  2. 2計算上、1回取引するごとに少しずつ損をしていく状態でした。儲かった金額と損した金額を比べても、損の方がずっと大きくて、利益を出すのがとても難しい作戦だったことがわかります。
  3. 3一番運が悪かった時には、一回の失敗で持っていたお金が全部なくなってしまう可能性がありました。これは、損が大きくなりすぎないようにする工夫が、うまく働いていなかったことを示しています。

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

  1. 1勝つ回数が少なくても、一回の勝ちで大きな利益が出ればプラスになる作戦もありますが、この作戦はそうなりませんでした。
  2. 29000回以上も売り買いしたのに利益が出なかったということは、「今がチャンス!」というサインの精度があまり良くなくて、意味のない取引をたくさんしてしまったのかもしれません。
  3. 3この作戦で売り買いするよりも、ただビットコインを買ってずっと持っているだけの方が、良い結果になっていました。つまり、何もしない方がマシだった、ということです。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金は、持っているお金全体の1%〜2%くらいにすると安心です。例えば、10万円持っていたら、1回に使うのは1000円〜2000円くらいにしておきます。

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

もし損がふくらんで、持っているお金の5%など、決めておいた額に達したら、その日は取引をやめたり、作戦を見直したりする勇気も大切です。

資金管理の方法

投資に使うお金と、普段のお小遣いや生活に使うお金は、きちんと分けて管理しましょう。そうすれば、もし投資で負けても生活に困ることはありません。

改良案の具体的提案

  • 「買いだ!」「売りだ!」というサインが出てもすぐに行動せず、グラフの形など、他の道具も使って「本当に今でいいのかな?」ともう一度確認する。
  • 作戦で使っている計算の数字(短い期間を5、長い期間を34にしている部分)を色々と変えてみて、もっと良い結果が出る組み合わせがないか探してみる。
  • 「ここまで損したらやめる」というルールを、もっと厳しく決めて、一度の失敗で大きな損をしないようにする。

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

  • この作戦は今回のテストでうまくいかなかったので、そのまま真似するのは危険です。もし試すなら、必ず練習用のツールや、なくなってもいいと思える少額で試してみましょう。
  • 5分ごとの値動きはとてもスピーディーです。焦ったり欲張ったりせず、自分で決めたルールを冷静に守ることが、とても大事になります。
  • 取引の結果をノートにつけて、「どこが良くて、どこが悪かったのか」を振り返ることが、上達への一番の近道です。

検証の透明性と信頼性

  • データの出所: この結果は、昔のビットコインの5分ごとの値段の記録を使って計算したものです。
  • 検証のやり方: 「バックテスト」という方法で、もし昔の時代にこの作戦を使っていたらどうなっていたか、をコンピューターでシミュレーションしました。
  • コード: このシミュレーションに使ったプログラムの設計図は、誰でも見られるようになっています。
  • 注意事項: これは昔のデータを使ったシミュレーション結果です。未来も同じように利益が出ることを保証するものではありません。投資は、自分でよく考えて、自分の責任で行いましょう。

よくある質問

Q.Awesome Oscillator(オーサム・オシレーター)って何?

A.値段の上がり下りの「勢い」が強いか弱いかを、グラフで見ることができる道具(インジケーター)のことだよ。

Q.BTC/USDTって何のこと?

A.ビットコイン(BTC)を、アメリカのドルと同じくらいの価値を持つ「テザー(USDT)」というコインで買う時の値段を表しているんだ。

Q.5分足ってどういう意味?

A.値段のグラフの種類のひとつで、5分間の値段の動きを1本の棒(ローソク足)で表したものだよ。短い時間の変化がよくわかるんだ。

Q.勝率7%ってすごく低いけど、それでも儲かることってあるの?

A.あるよ。勝つ回数が少なくても、1回勝った時の利益がすごく大きければ、たくさんの小さな負けをカバーできるからね。でも、残念ながら今回の作戦はそうじゃなかったんだ。

Q.この作戦を試すなら、いくらから始めればいい?

A.今回のテストでは大きな損が出てしまったから、この作戦をそのまま使うのはあまりおすすめできないんだ。もしどうしても試したいなら、ゲーム内のお金で練習するか、なくなっても絶対に困らない、本当に少ないお小遣いで試すのがいいと思うよ。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報