ビットコインの値段の動きを予測!みんなと逆をいく「はなれ具合作戦」
この作戦は、ビットコインの値段が「ふつうの値段」からすごく離れちゃったときに、「そろそろ元に戻るかな?」と予想して取引する方法です。1時間ごとの値動きを見て、昔のデータでうまくいくか試してみました。もうけるためのヒントが見つかるかもしれません!
導入と前提条件
この作戦は、ビットコインの値段が「ふつうの値段」からすごく離れちゃったときに、「そろそろ元に戻るかな?」と予想して取引する方法です。1時間ごとの値動きを見て、昔のデータでうまくいくか試してみました。もうけるためのヒントが見つかるかもしれません!
【検証】戦略のバックテスト概要
- 戦略名: Disparity Index を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 1h
- 期間: 2025-04-28〜2025-08-26(119日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
Disparity Index の理論的背景
この作戦の考え方は、「値段は、いつもの値段に戻りやすい」というものです。例えば、お祭りの屋台のりんご飴を想像してみてください。いつもは300円なのに、今日だけ特別に1000円だったら、「高すぎる!きっとまた元の値段に戻るだろうな」って思いますよね。ビットコインの値段も同じで、急に上がりすぎたり下がりすぎたりすると、またいつもの値段に戻りやすいんです。この「戻りやすさ」を数字で表して、チャンスを探すのがこの作戦です。
具体的な売買ルール(今回の検証)
エントリー条件
- 値段が「ふつうの値段」の線より、すごく下に離れたら買います。
- 値段が「ふつうの値段」の線より、すごく上に離れたら売ります。
エグジット条件
- 買った後、値段が「ふつうの値段」の線に近づいてきたら、そこで取引を終わりにします(もうけを確定したり、損を止めたりします)。
- 売った後も、値段が「ふつうの値段」の線に近づいてきたら、同じように取引を終わりにします。
リスク管理
大きな損をしないための工夫も大事です。「もし予想が外れてこれ以上損したらやめる」というルールを先に決めておきましょう。一度にたくさんのお金を使わないことも大切です。予想と反対に値段が動いたら、すぐにやめる勇気も必要ですよ。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Disparity Index』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 55回 |
勝率 | 58.18% |
平均利益 | 0.75% |
平均損失 | -1.65% |
期待値 | -0.26% |
プロフィットファクター | 0.64 |
最大ドローダウン | 23.08% |
最終リターン | -13.42% |
シャープレシオ | -0.3 |
HODL(Buy&Hold) | 16.67% |
HODL戦略との比較
実装コード(Python)
"""
Disparity Index Trading Signal
価格と移動平均の乖離率を使用
"""
import pandas as pd
import numpy as np
def calculate_disparity_index_signals(df: pd.DataFrame,
period: int = 14,
threshold: float = 3.0) -> pd.DataFrame:
"""
Disparity Index戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
period : int
移動平均期間(デフォルト: 14)
threshold : float
乖離率闾値(デフォルト: 3.0)
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# 移動平均
df['ma'] = df['close'].rolling(window=period).mean()
# Disparity Index
df['disparity'] = ((df['close'] - df['ma']) / df['ma']) * 100
# シグナル初期化
df['signal'] = 0
df['is_buy'] = False
df['is_sell'] = False
position = 0
for i in range(period, len(df)):
# 買いシグナル(下方乖離)
if position <= 0 and df['disparity'].iloc[i] < -threshold / 3:
df.loc[df.index[i], 'is_buy'] = True
df.loc[df.index[i], 'signal'] = 1
position = 1
# 売りシグナル(上方乖離)
elif position >= 0 and df['disparity'].iloc[i] > threshold / 3:
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 "Disparity Index"
def get_strategy_description() -> str:
"""戦略の説明を返す"""
return "価格と移動平均の乖離率を使用した逆張り戦略"
なぜこの結果になったのか(3つの理由)
- 1全部で55回取引をしたので、チャンスはそれなりにあったみたいです。
- 2勝った割合(勝率)は58.18%でした。半分以上は予想が当たって、もうけが出たということです。
- 3でも、1回の取引あたりの平均を見ると、結果として少しずつ損をしていました。勝つことも多いけど、負けたときの損が大きかったのかもしれません。
この結果から学べる3つの教訓
- 1値段が「ふつうの値段」から大きく離れると、また元に戻ろうとすることが多い、ということがわかります。
- 2みんなと逆をいく作戦は、タイミングがすごく大事です。小さいもうけをたくさん重ねても、一回の大きな損で全部なくなってしまうことがあるので、注意が必要です。
- 3勝った回数が多くても、必ずもうかるとは限らない、という大切なことが学べます。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金は、持っているお金のほんの少しだけ(例えば100分の1とか)にしましょう。そうすれば、もし負けても、ダメージは小さくてすみます。
損失が大きくなったときの対処法
もし損が続いて、持っているお金が10分の1くらい減ってしまったら、一度全部お休みしましょう。そして、作戦をもう一度考え直す時間を作ります。こうすることで、大負けを防げます。
資金管理の方法
取引に使うお金は、おこづかいや貯金の中から、「もしなくなっても大丈夫」と思える分だけにしましょう。生活に必要なお金は絶対に使ってはいけません。そして、もうけが出たら、その分だけ少しずつ取引に使うお金を増やすなど、上手にお金を管理することが大切です。
改良案の具体的提案
- 「どれくらい離れたら取引するか」のルールを、もう少しだけ変えてみたら、もっと良いタイミングが見つかるかもしれません。
- 取引をやめるタイミングも大事です。どうやったらもっともうけを伸ばせるか、損を小さくできるか、研究するのも面白そうです。
- この作戦が苦手な場面もあります。例えば、値段がずっと上がりっぱなし、下がりっぱなしのときです。そんなときのために、他の作戦と組み合わせるのも一つの手です。
実用性の向上(運用上の注意)
- この作戦は、値段が大きく動いた後を狙うので、急に予想と反対に動くこともあります。びっくりしないように、心の準備をしておきましょう。
- 「ふつうの値段」を計算する期間や、「どれくらい離れたら」のルールを少し変えるだけで、結果が全然ちがってくることがあります。色々な数字で試してみるのも面白いですよ。
- 最終的にいくらもうかったかだけでなく、途中で一番大きくお金が減ったのはどれくらいかもチェックしましょう。自分がドキドキしないで続けられる作戦かどうかがわかります。
検証の透明性と信頼性
- データの出所: 昔のビットコインの値段のデータを使って、このテストをしました。
- 検証のやり方: あるルールを決めて、過去の約4ヶ月分のデータで「もしこの作戦を使っていたらどうなっていたかな?」というシミュレーションをしました。
- コード: はい、この作戦をコンピューターで計算するためのプログラムの作り方も見ることができます。
- 注意事項: 注意:このテストの結果は、あくまで昔のデータで試したものです。これから先も同じようにうまくいくとは限りません。お金を使うときは、必ず自分でよく考えて決めてくださいね。