シェア:

ビットコインの未来の値段はわかる?「予測オシレーター」作戦を調べてみた!

ビットコインの1時間ごとの値段グラフを使って、「予測オシレーター」っていうお金を増やすための作戦を、119日間試してみました。この作戦は、昔の値段の動きを見て、未来の値段を予想するものです。それで、いつ買っていつ売ればいいかを見つけようとします。さて、結果はどうだったでしょう?

取引数
316
勝率
19.94%
最終リターン
-74.95%
最大DD
75.00%

導入と前提条件

ビットコインの1時間ごとの値段グラフを使って、「予測オシレーター」っていうお金を増やすための作戦を、119日間試してみました。この作戦は、昔の値段の動きを見て、未来の値段を予想するものです。それで、いつ買っていつ売ればいいかを見つけようとします。さて、結果はどうだったでしょう?

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

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

Forecast Oscillator の理論的背景

この作戦の基本的な考え方は、「値段の動きは、昔の動きに似ることがある」というものです。過去の値段の動きから、「未来はこんな値段になるかも?」という予想の線を引きます。そして、実際の値段が、その予想の線からどれくらい離れているかを測ります。これが「予測オシレーター」です。もし実際の値段が予想の線よりずっと上にあれば、「上がるパワーが強い!」という合図です。逆にずっと下にあれば、「パワーが弱まってきたかも」という合図になります。さらに、この「ずれ」の数字と、その数字の最近3日間の平均(シグナルライン)を比べて、いつ売ったり買ったりするかを決めます。

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

エントリー条件

  • 「予測オシレーター」の数字が、「シグナルライン」という平均の線を追い越して、さらにプラスの数字になったときです。これは「買うパワーが強い!」と判断するサインです。
  • まだビットコインを持っていないとき、またはすでに売ってしまっているときに、新しく買います。

エグジット条件

  • 「予測オシレーター」の数字が、「シグナルライン」より下になったときです。これは持っているビットコインを売る合図です。
  • または、「予測オシレーター」の数字がマイナスになったときも売ります。

リスク管理

この作戦では、大きな損をしないように気をつけることが大切です。例えば、「最大ドローダウン(自分のお金が一番減ってしまった時の割合)」が75%を超えないようにします。そのためには、一度に買う量を決めたり、「これ以上損したら売る」という「損切り」のルールをしっかり守ったりすることが必要です。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数316回
勝率19.94%
平均利益0.63%
平均損失-0.7%
期待値-0.44%
プロフィットファクター0.22
最大ドローダウン75%
最終リターン-74.95%
シャープレシオ-2.83
HODL(Buy&Hold)16.66%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Forecast Oscillator Trading Signal
予測オシレーターによるトレンド判定
"""
import pandas as pd
import numpy as np


def calculate_forecast_oscillator_signals(df: pd.DataFrame,
                                        period: int = 14) -> pd.DataFrame:
    """
    Forecast Oscillator戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        計算期間(デフォルト: 14)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # 線形回帰予測
    def linear_regression_forecast(data):
        if len(data) < 2:
            return np.nan
        x = np.arange(len(data))
        coeffs = np.polyfit(x, data, 1)
        return coeffs[0] * len(data) + coeffs[1]
    
    # 予測値
    df['forecast'] = df['close'].rolling(window=period).apply(linear_regression_forecast, raw=False)
    
    # Forecast Oscillator
    df['fosc'] = ((df['close'] - df['forecast']) / df['close']) * 100
    
    # シグナルライン
    df['fosc_signal'] = df['fosc'].rolling(window=3).mean()
    
    # シグナル初期化
    df['signal'] = 0
    df['is_buy'] = False
    df['is_sell'] = False
    
    position = 0
    
    for i in range(period + 3, len(df)):
        # 買いシグナル
        if position <= 0 and df['fosc'].iloc[i] > df['fosc_signal'].iloc[i] and df['fosc'].iloc[i] > 0:
            df.loc[df.index[i], 'is_buy'] = True
            df.loc[df.index[i], 'signal'] = 1
            position = 1
            
        # 売りシグナル
        elif position >= 0 and df['fosc'].iloc[i] < df['fosc_signal'].iloc[i] and df['fosc'].iloc[i] < 0:
            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 "Forecast Oscillator"


def get_strategy_description() -> str:
    """戦略の説明を返す"""
    return "予測オシレーターによるトレンド判定戦略"

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

  1. 1うまくいった確率(勝率)が約20%と低かったからです。つまり、5回やって1回しかうまくいきませんでした。
  2. 21回やるごとに、平均すると少しずつ損をしてしまう計算だったので、やればやるほど、全体としてお金が減りやすい状態でした。
  3. 3運が悪いと、持っているお金が最大で75%も減ってしまう可能性があったからです。一度の失敗で、すごく大きな損をしてしまう危険がありました。

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

  1. 1未来の値段を当てるのは、やっぱりすごく難しいってことですね。簡単な方法だけでは、なかなかお金を増やすのは大変だということがわかりました。
  2. 2たくさん売ったり買ったりしても、うまくいく確率が低いと、全体では結局損をしてしまうことがある、という教訓になりました。
  3. 3「最大ドローダウン」が大きい作戦は、大損する危険があるということです。だから、自分のお金をどう使うか、しっかり計画を立てることがすごく大事だとわかりました。

リスク管理の具体的手法

取引量の決め方

一度に買う量を、自分のお金のほんの一部(例えば100分の1とか)にすることです。こうすれば、もし失敗しても、大損することはありません。

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

もし損が続いて、自分のお金が10%減ってしまったら、一度お休みする、といったルールを決めておくことです。損がどんどん大きくなるのを防ぎます。

資金管理の方法

「1回のチャレンジで、失ってもいいお金はここまで」と上限を決めておくことです。儲かったら少しだけチャレンジする金額を増やし、損したら減らすなど、状況に合わせてお金の使い方を変えるのが大事です。

改良案の具体的提案

  • 計算に使う日数を変えてみることです。例えば14日間じゃなくて、10日間や20日間で計算したら、もっと良い結果が出るかもしれません。
  • 他の作戦と組み合わせることです。例えば、値段の上がり下がりを見る別の道具と一緒に使って、「本当に今が買い時かな?」と、もっと正確に判断できるようにします。
  • 「どれくらい儲かったら売るか」や、「どれくらい損したらやめるか」のルールを、もっと上手につくることです。これで、利益はしっかり取って、損は小さくできます。

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

  • 今回の作戦はうまくいきませんでしたが、「未来を予想する」という考え方は、他の方法を考えるときのヒントになるかもしれません。
  • 実際にお金を使って試す前に、必ず昔のデータで「もしこの作戦を使っていたらどうなっていたかな?」とシミュレーションしてみましょう。どれくらい危ない作戦なのか、ちゃんと分かってからにすることが大切です。
  • 世の中の状況はどんどん変わります。だから、一度つくった作戦が、ずっとうまくいくとは限りません。時々、作戦を見直すことが大切です。

検証の透明性と信頼性

  • データの出所: この実験で使ったのは、ビットコインの1時間ごとの値段のデータです。(始まりの値段、一番高かった値段、一番安かった値段、終わりの値段などが入っています)
  • 検証のやり方: 「予測オシレーター」という計算方法で、ある期間(2025年4月28日から8月26日までの119日間)のデータを使って、「もしこの作戦で売ったり買ったりしていたら、どうなっていたか」をコンピューターでシミュレーションしました。
  • コード: この作戦を計算したり、調べたりするためのコンピュータープログラムは、誰でも見られるようになっています。
  • 注意事項: この記事は、「こうすれば儲かるよ!」とおすすめするものではありません。もし実際にお金を使う場合は、自分でよく考えて、自分の責任で行ってくださいね。昔うまくいったからといって、未来もうまくいくとは限りません。

よくある質問

Q.「予測オシレーター」って、どうやって未来の値段を予想するの?

A.昔の値段の動きのパターンから、「次はこう動くんじゃないかな?」という予想の線を引いて、未来の値段を当てようとしています。

Q.「勝率19.94%」って、ほとんど負けてるってこと?

A.その通りです。すごく簡単に言うと、5回チャレンジして、うまくいったのは1回だけ、という感じです。

Q.「最大DD:75%」って、すごく怖いんだけど、どういう意味?

A.もし一番運が悪いタイミングだったら、あなたのお金が100万円あったとしたら、一時的に25万円まで減ってしまう可能性があった、という意味です。とても大きなリスクですね。

Q.この作戦で、どうやって「買うタイミング」や「売るタイミング」を決めるの?

A.「予測オシレーター」という、未来を予想する数字があります。その数字が、平均の線(シグナルライン)を追い越したら「買い!」、下回ったら「売り!」というふうに決めています。

Q.こんなに成績が悪かったら、この作戦は全然ダメなの?

A.今回試したやり方ではうまくいきませんでしたが、この作戦が完全にダメというわけではありません。計算の仕方を変えたり、他の作戦と組み合わせたりすることで、もっとうまくいく方法が見つかる可能性はありますよ。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報