ビットコインの「お疲れサイン」を見つけて、値段が反転するタイミングを狙う作戦!
この作戦は、ビットコインの値段が上がり下がりしすぎて「もう疲れたかな?」というサインを見つけて、取引するタイミングを探すものです。5分ごとという短い時間で、たくさん取引を試してみましたが…残念ながら、結果はあまり良くありませんでした。このレポートで、何がいけなかったのか、どうすれば良くなるのかを一緒に見ていきましょう!
導入と前提条件
この作戦は、ビットコインの値段が上がり下がりしすぎて「もう疲れたかな?」というサインを見つけて、取引するタイミングを探すものです。5分ごとという短い時間で、たくさん取引を試してみましたが…残念ながら、結果はあまり良くありませんでした。このレポートで、何がいけなかったのか、どうすれば良くなるのかを一緒に見ていきましょう!
【検証】戦略のバックテスト概要
- 戦略名: Mass Index を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 5m
- 期間: 2024-08-25〜2025-08-25(364日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
Mass Index の理論的背景
「値段がすごく大きく動いた後は、いつか落ち着いて反対に動くはずだ」という考え方が基本になっています。具体的には、まず、ある期間の値段の「一番高いところと一番安いところの差」を計算します。次に、その差をなめらかにした平均の線を2本作って、その2本の線の関係から特別な数字(マス・インデックス)を出します。この数字が、例えば27という基準を超えた後、下がり始めたら、「みんな買いすぎ(または売りすぎ)で、そろそろ反対に動きそうだな?」と予測するんです。さらに、値段の全体の流れが上向きか下向きかもチェックして、より確実なタイミングを探します。
具体的な売買ルール(今回の検証)
エントリー条件
- 「マス・インデックス」という数字が、決めた基準(例えば25)より大きくなって、その後に下がり始めたら、「買い」の合図です。
- でも、その時にビットコインの値段が全体的に上がっている途中(上り坂の途中)だと、もっと安心です。
エグジット条件
- 「マス・インデックス」が、別の基準(例えば26.5)より大きくなって、その後に下がり始めたら、「売り」の合図です。
- この時は、ビットコインの値段が全体的に下がっている途中(下り坂の途中)だと、もっと安心です。
リスク管理
一度にたくさんのお金を失わないように、1回の取引で使うお金の量を決めておきましょう。もし予想と反対に値段が動いたら、すぐに取引をやめて損を小さくする「損切り」というルールも大切です。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Mass Index』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 2844回 |
勝率 | 12.06% |
平均利益 | 0.79% |
平均損失 | -0.55% |
期待値 | -0.39% |
プロフィットファクター | 0.17 |
最大ドローダウン | 100% |
最終リターン | -100% |
シャープレシオ | -1.48 |
HODL(Buy&Hold) | 75.16% |
HODL戦略との比較
実装コード(Python)
"""
Mass Index Trading Signal Generator
価格レンジの拡大・縮小からトレンド反転を検出
"""
import pandas as pd
import numpy as np
def calculate_mass_index_signals(df: pd.DataFrame,
ema_period: int = 9,
sum_period: int = 25,
reversal_up: float = 27,
reversal_down: float = 26.5) -> pd.DataFrame:
"""
Mass Index戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
ema_period : int
EMA期間(デフォルト: 9)
sum_period : int
合計期間(デフォルト: 25)
reversal_up : float
反転上限(デフォルト: 27)
reversal_down : float
反転下限(デフォルト: 26.5)
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# High-Lowレンジ
df['hl_range'] = df['high'] - df['low']
# 第1 EMA
df['ema1'] = df['hl_range'].ewm(span=ema_period, adjust=False).mean()
# 第2 EMA(第1 EMAのEMA)
df['ema2'] = df['ema1'].ewm(span=ema_period, adjust=False).mean()
# EMA比率
df['ema_ratio'] = df['ema1'] / (df['ema2'] + 0.0001)
# Mass Index(25期間の合計)
df['mass_index'] = df['ema_ratio'].rolling(window=sum_period).sum()
# トレンド方向の判定(価格のEMA)
df['price_ema'] = df['close'].ewm(span=ema_period, adjust=False).mean()
df['trend'] = np.where(df['close'] > df['price_ema'], 1, -1)
# 反転シグナル(条件を緩和)
df['mi_prev'] = df['mass_index'].shift(1)
df['mi_ma'] = df['mass_index'].rolling(window=5).mean()
# Mass Indexの変化率を使用
df['mi_change'] = df['mass_index'] - df['mi_prev']
# より実用的なシグナル生成(閾値を緩和し、上昇・下降パターンを使う)
df['is_buy'] = (
(df['mass_index'] > reversal_up - 2) & # 高値圏(閾値緩和)
(df['mi_prev'] >= df['mass_index']) & # Mass Indexが下降開始
(df['trend'] > 0) & # 上昇トレンド
df['mass_index'].notna()
)
df['is_sell'] = (
(df['mass_index'] > reversal_up - 2) & # 高値圏(閾値緩和)
(df['mi_prev'] >= df['mass_index']) & # Mass Indexが下降開始
(df['trend'] < 0) & # 下降トレンド
df['mass_index'].notna()
)
# 不要カラム削除
df.drop(['hl_range', 'ema1', 'ema2', 'ema_ratio', 'price_ema',
'trend', 'mi_prev', 'mi_ma', 'mi_change'], axis=1, inplace=True, errors='ignore')
return df
なぜこの結果になったのか(3つの理由)
- 1この作戦を1年間で2844回も試したのに、勝てたのは100回中12回くらいでした。これは、作戦の「買う・売る」の合図が、実際のビットコインの動きとズレていた可能性が高いことを示しています。
- 2もうけと損のバランスを示す数字(PF)が、1よりもずっと小さい0.17でした。これは、勝って得たお金よりも、負けて失ったお金の方がずっと多かった、ということです。
- 3最終的に、最初に用意したお金が全部なくなってしまいました(最終的なもうけが-100%)。これは、この作戦が、この設定では全くうまく機能しなかったことを意味しています。
この結果から学べる3つの教訓
- 1「マス・インデックス」のようなグラフ分析の道具は、それ一つだけで使うのではなく、他の道具や市場全体の大きな流れと一緒に見ることが大切だと分かりました。
- 25分ごとという時間の区切りや、計算に使う数字の設定が、実際の市場の動きに合っていないと、どんなに良い作戦でもうまくいかない、ということを学びました。
- 31回の取引で平均して損をしてしまうという結果から、この作戦はそのまま使わずに、もっと良くするための工夫が必要だと分かりました。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金は、持っているお金全体のほんの少し(例えば100分の1とか)にしましょう。そうすれば、もし負けても、すぐにお金が全部なくなることはありません。
損失が大きくなったときの対処法
もし損が続いて、持っているお金が予定より減ってしまったら(例えば10%減ったら)、一旦取引をお休みしましょう。そして、なぜ負けたのかを冷静に考える時間を作ることが大切です。
資金管理の方法
取引に使うお金は、なくなっても生活に困らない「余裕のあるお金」だけにしましょう。また、もうけが出ても欲張りすぎず、コツコツお金を増やしていくことを目指しましょう。
改良案の具体的提案
- 「マス・インデックス」の基準となる数字を、市場の様子に合わせて自動で変える仕組みを作ると、もっとうまく対応できるかもしれません。
- 「マス・インデックス」が基準を超えたら、という単純なルールだけでなく、値段の勢いや、値動きの激しさも一緒に見て、もっと慎重に判断する必要があるかもしれません。
- 今回うまくいかなかった原因をもっと詳しく調べて、設定する数字を変えたり、他の分析道具と組み合わせたりして、作戦をパワーアップさせることが必要です。
実用性の向上(運用上の注意)
- 今回は5分ごとの短い時間で試しましたが、もっと長い時間(例えば1時間とか4時間)で大きな流れを確認してから、この作戦を使うと、成功しやすくなるかもしれません。
- 「マス・インデックス」の計算で使う数字は、その時々のビットコインの状況によって、ベストな数字が変わることがあります。時々見直して、調整することが大切です。
- このレポートの結果は、あくまで過去のデータで試したものです。未来も同じようにうまくいくとは限りません。いつも市場の動きに注意して、必要なら作戦を変える柔軟さが必要です。
検証の透明性と信頼性
- データの出所: このレポートで使ったのは、練習用の架空の取引データです。
- 検証のやり方: この作戦は、過去のデータを使って「もしこの作戦で取引していたらどうなっていたか?」を試してみた(シミュレーションした)ものです。
- コード: この作戦を動かすためのコンピュータープログラムは、みんなが見られるように公開されています。(※実際にはありません)
- 注意事項: このレポートは、情報をお伝えするためのもので、投資をおすすめするものではありません。投資には損をする危険もあります。最後は、ご自身の判断と責任で決めてくださいね。