ビットコインの売買タイミング、どうやって決める?「アルティメット・オシレーター」を学ぼう!
ビットコインで利益を出すことを目指す方法の一つ、「アルティメ-ット・オシレーター」を、中学生にも分かるようにやさしく説明します。いつ買って、いつ売ればいいのか、そのヒントが見つかるかもしれません。実際にこの方法を試してみた結果も一緒に見ていきましょう。
導入と前提条件
ビットコインで利益を出すことを目指す方法の一つ、「アルティメ-ット・オシレーター」を、中学生にも分かるようにやさしく説明します。いつ買って、いつ売ればいいのか、そのヒントが見つかるかもしれません。実際にこの方法を試してみた結果も一緒に見ていきましょう。
【検証】戦略のバックテスト概要
- 戦略名: 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)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Ultimate Oscillator』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 64回 |
勝率 | 46.88% |
平均利益 | 0.89% |
平均損失 | -1.27% |
期待値 | -0.26% |
プロフィットファクター | 0.61 |
最大ドローダウン | 20.51% |
最終リターン | -15.7% |
シャープレシオ | -0.34 |
HODL(Buy&Hold) | 17.71% |
HODL戦略との比較
実装コード(Python)
"""
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回取引するごとに、平均して0.26%ずつ損をしてしまう計算でした。
- 2勝率は約47%でした。これは、100回取引したら、53回は負けてしまうということです。半分以上負けているので、買う・売るのタイミングが少しずれていたのかもしれません。
- 3一番うまくいかなかった時には、お金が一時的に20.51%も減ってしまいました(これを最大DDと言います)。最終的には、最初のお金が15.7%減って終わりました。
この結果から学べる3つの教訓
- 1「アルティメット・オシレーター」は、考え方としては良さそうに見えても、実際にやってみると必ずうまくいくわけではない、ということが分かりました。
- 2元気メーターの「30」や「70」といった基準にする数字を変えたりすると、結果が良くなる可能性もあることが分かりました。
- 3どんなに良い方法を使っても、投資では損をしてしまう可能性があることを学びました。昔のデータが良かったからといって、未来も同じ結果になるとは限らないんですね。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金は、持っているお金全体の1%から2%くらいに抑えるのがおすすめです。例えば、もし1万円持っていたら、1回に使うのは100円から200円くらいです。こうすれば、もし失敗しても大きなダメージを受けずにすみます。
損失が大きくなったときの対処法
もし損が続いて、持っているお金が10%減ってしまったら(例えば1万円が9千円になったら)、一度全部の取引をやめて、相場の様子を見る、というルールを作るのも良い方法です。
資金管理の方法
持っているお金を全部投資に使うのではなく、一部だけを使うようにしましょう。そして、もし利益が出たら、その一部を次の投資に使うこともできますが、無理はしないようにしましょう。
改良案の具体的提案
- 元気メーターが30より下がってから上がるとき、買う基準の数字をもう少し低く設定すれば、もっと早く買うチャンスを見つけられるかもしれません。
- 元気メーターが70より上がってから下がるとき、売る基準の数字をもう少し高く設定すれば、もう少し利益を伸ばしてから売れるかもしれません。
- この方法だけでなく、他の道具(例えば、値段の平均を表す線など)も一緒に使って、「本当に今がチャンスかな?」とダブルチェックする方法を考えてみます。
実用性の向上(運用上の注意)
- この方法を試すなら、まずはお小遣いの範囲で、本当に少しの金額から始めてみましょう。慣れてきたら、少しずつ金額を増やしていくのが安全です。
- 使う数字の設定(例えば「30」や「70」)は、いつも同じものがベストとは限りません。時々、今のビットコインの動きに合っているか見直してみると良いかもしれません。
- この方法だけに頼らず、世界でどんなニュースが流れているかなど、他の情報も参考にしながら、最後は自分で考えて判断することがとても大切です。
検証の透明性と信頼性
- データの出所: この実験では、インターネットで公開されている、過去のビットコインの値段のデータを使いました。
- 検証のやり方: パソコンのプログラムを使って、「もし昔、このやり方で投資していたら、結果はどうなっていたかな?」という実験(シミュレーション)をしました。
- コード: この実験で使ったプログラムがどんなものかは、見ようと思えば誰でも見られるようになっています。
- 注意事項: この記事は、あくまで昔のデータを使った実験の結果です。未来も同じようにお金が増えることを約束するものではありません。投資をするときは、自分でよく考えて、損してしまう可能性もあることを忘れないでくださいね。