ビットコインの未来の値段はわかる?「予測オシレーター」作戦を調べてみた!
ビットコインの1時間ごとの値段グラフを使って、「予測オシレーター」っていうお金を増やすための作戦を、119日間試してみました。この作戦は、昔の値段の動きを見て、未来の値段を予想するものです。それで、いつ買っていつ売ればいいかを見つけようとします。さて、結果はどうだったでしょう?
導入と前提条件
ビットコインの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)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Forecast Oscillator』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 316回 |
勝率 | 19.94% |
平均利益 | 0.63% |
平均損失 | -0.7% |
期待値 | -0.44% |
プロフィットファクター | 0.22 |
最大ドローダウン | 75% |
最終リターン | -74.95% |
シャープレシオ | -2.83 |
HODL(Buy&Hold) | 16.66% |
HODL戦略との比較
実装コード(Python)
"""
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うまくいった確率(勝率)が約20%と低かったからです。つまり、5回やって1回しかうまくいきませんでした。
- 21回やるごとに、平均すると少しずつ損をしてしまう計算だったので、やればやるほど、全体としてお金が減りやすい状態でした。
- 3運が悪いと、持っているお金が最大で75%も減ってしまう可能性があったからです。一度の失敗で、すごく大きな損をしてしまう危険がありました。
この結果から学べる3つの教訓
- 1未来の値段を当てるのは、やっぱりすごく難しいってことですね。簡単な方法だけでは、なかなかお金を増やすのは大変だということがわかりました。
- 2たくさん売ったり買ったりしても、うまくいく確率が低いと、全体では結局損をしてしまうことがある、という教訓になりました。
- 3「最大ドローダウン」が大きい作戦は、大損する危険があるということです。だから、自分のお金をどう使うか、しっかり計画を立てることがすごく大事だとわかりました。
リスク管理の具体的手法
取引量の決め方
一度に買う量を、自分のお金のほんの一部(例えば100分の1とか)にすることです。こうすれば、もし失敗しても、大損することはありません。
損失が大きくなったときの対処法
もし損が続いて、自分のお金が10%減ってしまったら、一度お休みする、といったルールを決めておくことです。損がどんどん大きくなるのを防ぎます。
資金管理の方法
「1回のチャレンジで、失ってもいいお金はここまで」と上限を決めておくことです。儲かったら少しだけチャレンジする金額を増やし、損したら減らすなど、状況に合わせてお金の使い方を変えるのが大事です。
改良案の具体的提案
- 計算に使う日数を変えてみることです。例えば14日間じゃなくて、10日間や20日間で計算したら、もっと良い結果が出るかもしれません。
- 他の作戦と組み合わせることです。例えば、値段の上がり下がりを見る別の道具と一緒に使って、「本当に今が買い時かな?」と、もっと正確に判断できるようにします。
- 「どれくらい儲かったら売るか」や、「どれくらい損したらやめるか」のルールを、もっと上手につくることです。これで、利益はしっかり取って、損は小さくできます。
実用性の向上(運用上の注意)
- 今回の作戦はうまくいきませんでしたが、「未来を予想する」という考え方は、他の方法を考えるときのヒントになるかもしれません。
- 実際にお金を使って試す前に、必ず昔のデータで「もしこの作戦を使っていたらどうなっていたかな?」とシミュレーションしてみましょう。どれくらい危ない作戦なのか、ちゃんと分かってからにすることが大切です。
- 世の中の状況はどんどん変わります。だから、一度つくった作戦が、ずっとうまくいくとは限りません。時々、作戦を見直すことが大切です。
検証の透明性と信頼性
- データの出所: この実験で使ったのは、ビットコインの1時間ごとの値段のデータです。(始まりの値段、一番高かった値段、一番安かった値段、終わりの値段などが入っています)
- 検証のやり方: 「予測オシレーター」という計算方法で、ある期間(2025年4月28日から8月26日までの119日間)のデータを使って、「もしこの作戦で売ったり買ったりしていたら、どうなっていたか」をコンピューターでシミュレーションしました。
- コード: この作戦を計算したり、調べたりするためのコンピュータープログラムは、誰でも見られるようになっています。
- 注意事項: この記事は、「こうすれば儲かるよ!」とおすすめするものではありません。もし実際にお金を使う場合は、自分でよく考えて、自分の責任で行ってくださいね。昔うまくいったからといって、未来もうまくいくとは限りません。