ビットコインの未来の値段を予想? 2つの道具で「買う・売る」タイミングを見つける方法
この作戦は、ビットコインの値段が短い時間でどう動くかを予想してみるものです。「RSI」と「移動平均線」という2つの道具を使って、いつ買うか、いつ売るかを探します。過去のデータで試してみた結果を見てみましょう。
導入と前提条件
この作戦は、ビットコインの値段が短い時間でどう動くかを予想してみるものです。「RSI」と「移動平均線」という2つの道具を使って、いつ買うか、いつ売るかを探します。過去のデータで試してみた結果を見てみましょう。
【検証】戦略のバックテスト概要
- 戦略名: RSI + MA Combined を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 5m
- 期間: 2024-07-21〜2025-08-25(399日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
RSI + MA Combined の理論的背景
この作戦の基本的な考え方は、値段が持っている「パワー」と「平均に戻ろうとする力」の2つを利用することです。「RSI」は、値段が急に上がりすぎたり、下がりすぎたりしていないかを見るための道具です。例えば、RSIの数字が低い(安くなりすぎ)とき、それは「ちょっと下がりすぎたから、そろそろ値段が戻るかも」というサインになります。一方、「移動平均線」は最近の値段の平均なので、値段がこの線から大きく離れてしまった場合、また線の近くに戻ってくることが多いと考えられます。この作戦では、この2つのサインを組み合わせて、「もっと成功しそうなタイミング」を探そうとしているのです。
具体的な売買ルール(今回の検証)
エントリー条件
- 「RSI」が「安くなりすぎ」の目安より少し上の数字になって、さらにビットコインの値段が移動平均線よりも上になったら、買うタイミングです。
- 「RSI」が「高くなりすぎ」の目安より少し下の数字になって、さらにビットコインの値段が移動平均線よりも下になったら、売るタイミングです。
エグジット条件
- 買った後、利益が出ているときに、「RSI」が「高くなりすぎ」の目安に近づいたら、売って利益を確定させます。
- 売った後、利益が出ているときに、「RSI」が「安くなりすぎ」の目安に近づいたら、買い戻して利益を確定させます。
- もし損をしていても、決めておいた金額まで損したら、それ以上損が大きくならないように取引をやめます。(これはとても大事なルールです)
リスク管理
1回の取引で損してもいい金額を、持っているお金のすごく小さい一部に決めておくことが大切です。例えば、持っているお金の100分の1とか100分の2だけにするんです。こうすれば、もし何回か負けてしまっても、すぐにお金が全部なくなってしまうことを防げます。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『RSI + MA Combined』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 156回 |
勝率 | 37.18% |
平均利益 | 1.84% |
平均損失 | -1.56% |
期待値 | -0.3% |
プロフィットファクター | 0.64 |
最大ドローダウン | 43.79% |
最終リターン | -40.34% |
シャープレシオ | -0.06 |
HODL(Buy&Hold) | 67.84% |
HODL戦略との比較
実装コード(Python)
#!/usr/bin/env python3
"""
RSI + MA複合戦略
RSIとMAの両方の条件が揃ったときにエントリー
"""
import pandas as pd
import numpy as np
def calculate_rsi_ma_signals(df: pd.DataFrame, rsi_period: int = 14, ma_period: int = 20,
oversold: int = 30, overbought: int = 70) -> pd.DataFrame:
"""
RSI + MA複合シグナルを生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
rsi_period : int
RSI期間(デフォルト: 14)
ma_period : int
MA期間(デフォルト: 20)
oversold : int
売られすぎ水準(デフォルト: 30)
overbought : int
買われすぎ水準(デフォルト: 70)
Returns:
--------
pd.DataFrame
シグナル列が追加されたDataFrame
"""
df = df.copy()
# RSI計算
delta = df['close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=rsi_period).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=rsi_period).mean()
rs = gain / loss
df['rsi'] = 100 - (100 / (1 + rs))
# MA計算
df['ma'] = df['close'].rolling(window=ma_period).mean()
# 複合シグナル(条件を緩和)
df['is_buy'] = (
(df['rsi'] < oversold + 10) & # RSIが売られすぎ近辺
(df['close'] > df['ma']) # 価格がMA上
)
df['is_sell'] = (
(df['rsi'] > overbought - 10) & # RSIが買われすぎ近辺
(df['close'] < df['ma']) # 価格がMA下
)
# NaN値をFalseに置換
df['is_buy'] = df['is_buy'].fillna(False)
df['is_sell'] = df['is_sell'].fillna(False)
print(f"RSI+MA複合: RSI期間={rsi_period}, MA期間={ma_period}")
print(f"買いシグナル数: {df['is_buy'].sum()}")
print(f"売りシグナル数: {df['is_sell'].sum()}")
return df
なぜこの結果になったのか(3つの理由)
- 1このやり方を過去のデータで試したところ、156回取引をしましたが、最終的には約40%も損をしてしまいました。これは、このやり方ではうまく利益が出せなかったということです。
- 2勝った割合は37.18%で、半分以下でした。これは、取引の半分以上が負けてしまったということです。
- 3一番大きく損した時は、持っていたお金が約44%も減ってしまいました。これは、損が大きくなる前に取引をやめるのが遅れてしまったのかもしれない、ということを示しています。
この結果から学べる3つの教訓
- 1「RSI」と「移動平均線」という2つの道具をただ組み合わせるだけでは、ビットコインみたいに値段の動きが激しいもので安定して利益を出すのは、難しいことがあるとわかりました。
- 2過去のデータで試してみる(バックテスト)ことは、そのやり方が良いか悪いかを知るためにすごく大事です。でも、結果が悪かったからといってすぐにあきらめるのではなく、どうしてダメだったのかを考えることがもっと大切です。
- 3取引した回数は156回と多かったのに、結果的に損をしてしまったということは、1回ごとの儲けが小さくて損が大きかったり、負ける回数がとても多かったりしたのかもしれません。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金の量をあらかじめ決めておきます。例えば、持っているお金全体の2%だけ、というように、もし失っても大丈夫な範囲の金額で取引します。こうすれば、続けて負けてもすぐにお金がゼロになるのを防げます。
損失が大きくなったときの対処法
もし、持っているお金が、例えば10%以上減ってしまったら、一度取引をお休みします。そして、作戦やお金の管理方法に問題がないか見直します。こうすることで、損がどんどん大きくなるのを止められます。
資金管理の方法
取引に使うお金の合計額を、持っているお金全体の半分まで、というように上限を決めます。一度にたくさんのお金を危険にさらさないように管理することで、心に余裕をもって取引ができます。
改良案の具体的提案
- 「RSI」や「移動平均線」で使う設定の数字を色々と変えてみて、もっと良い結果が出る組み合わせがないか探してみます。
- このやり方に、ほかの道具(例えば、値段のパワーの変化を見る道具など)を組み合わせたり、新しいルール(例えば、少しでも利益が出たらすぐにやめる、など)を追加したりして、作戦をもっと強くしてみます。
- ビットコインの値段の動きが激しい時と、おとなしい時で、この作戦がうまくいくかどうかが変わるかもしれません。だから、市場の様子に合わせて作戦を使い分けたり、取引する時間を決めたりすることも考えられます。
実用性の向上(運用上の注意)
- この作戦は、5分ごとの値段の動きを見ています。短い時間での取引はチャンスも多いですが、急に値段が動いて損をすることもあるので注意が必要です。
- テストの結果では、この作戦を使うより、ただビットコインをずっと持っている(HODL)方が、結果的に儲かっていました(HODLは67.84%のプラス、この作戦は-40.34%のマイナス)。取引を始める前に、このことを知っておくのはとても大事です。
- このテスト結果は、あくまで過去のデータでのお話です。未来も同じようにうまくいくとは限りません。本当に自分のお金で取引する前には、ごく少ない金額で試したり、ゲーム感覚でできるお試し用の口座を使ったりして、慎重に判断してくださいね。
検証の透明性と信頼性
- データの出所: 取引のデータは、取引所が公開している、値段の始まり、高値、安値、終わり、取引された量といった情報を使いました。
- 検証のやり方: 過去の決まった期間のデータを使って、この作戦で取引したらどうなっていたかをコンピューターで試してみました。これを「バックテスト」と言います。
- コード: このテストをするために使ったコンピュータープログラム(Pythonコード)は、誰でも見られるようになっています。
- 注意事項: このお話やテスト結果は、あくまで情報としてお伝えするもので、将来の利益を約束するものではありません。投資は、ご自身の判断と責任で行ってください。特にビットコインのようなデジタルなお金は、値段の動きがとても激しいので、大きく損をしてしまう可能性もあります。