ビットコインの未来を予測?2つの道具を使った作戦の結果は…
この作戦は、ビットコインが次にどう動くかを見て、いつ買っていつ売ればいいかを探すためのものです。5分ごとの短い値動きを見て判断する、初心者にも分かりやすいシンプルなルールです。でも、残念ながら、結果はあまり良くなかったみたいです。
導入と前提条件
この作戦は、ビットコインが次にどう動くかを見て、いつ買っていつ売ればいいかを探すためのものです。5分ごとの短い値動きを見て判断する、初心者にも分かりやすいシンプルなルールです。でも、残念ながら、結果はあまり良くなかったみたいです。
【検証】戦略のバックテスト概要
- 戦略名: CCI + MA Filter を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 5m
- 期間: 2024-08-06〜2025-08-25(383日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
CCI + MA Filter の理論的背景
この作戦の考え方の基本は、「トレンドフォロー」というものです。これは、値段が上がっている大きな波に乗って、利益をねらう作戦です。『CCI』は、その波の勢いが強まった「瞬間」を教えてくれます。でも、一瞬の動きにだまされることもあります。そこで、『移動平均線』という、もっと大きな時間の流れを見る道具を「フィルター」として使います。コーヒーフィルターのように、余計な情報を取りのぞいて、「本当にこの波に乗って大丈夫かな?」と確認するんです。勢いと流れ、両方がそろったときだけ取引することで、失敗を減らそうという工夫がされています。
具体的な売買ルール(今回の検証)
エントリー条件
- 【買いのチャンス】値段の勢い(CCI)がマイナスからプラスに変わって、さらに、値段が平均の流れ(移動平均線)よりも上にあるとき。
- 【売りのチャンス】値段の勢い(CCI)がプラスからマイナスに変わって、さらに、値段が平均の流れ(移動平均線)よりも下にあるとき。
エグジット条件
- 【買った後】値段の勢い(CCI)がプラスからマイナスに変わったら、売って取引を終わります。
- 【売った後】値段の勢い(CCI)がマイナスからプラスに変わったら、買いもどして取引を終わります。
リスク管理
大きな損をしないためには、「この金額まで損したら、きっぱりあきらめる」という「損切り」のルールを決めておくことが、とても大切です。また、一度にたくさんのお金を使わないようにすることも大事なポイントです。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『CCI + MA Filter』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 1421回 |
勝率 | 15.34% |
平均利益 | 1.21% |
平均損失 | -0.64% |
期待値 | -0.36% |
プロフィットファクター | 0.4 |
最大ドローダウン | 99.48% |
最終リターン | -99.43% |
シャープレシオ | -0.67 |
HODL(Buy&Hold) | 101.35% |
HODL戦略との比較
実装コード(Python)
"""
CCI with MA Filter
CCIゼロクロスに価格SMAフィルターを組み合わせるのだ。
"""
import pandas as pd
def _typical_price(df: pd.DataFrame) -> pd.Series:
return (df['high'] + df['low'] + df['close']) / 3
def _cci(df: pd.DataFrame, period: int = 20) -> pd.Series:
tp = _typical_price(df)
ma = tp.rolling(period).mean()
md = (tp - ma).abs().rolling(period).mean()
return (tp - ma) / (0.015 * md)
def calculate_cci_ma_signals(df: pd.DataFrame, cci_period: int = 20, ma_period: int = 50) -> pd.DataFrame:
out = df.copy()
out['cci'] = _cci(out, cci_period)
out['sma'] = out['close'].rolling(ma_period).mean()
prev = out['cci'].shift(1)
out['is_buy'] = (out['cci'] > 0) & (prev <= 0) & (out['close'] > out['sma'])
out['is_sell'] = (out['cci'] < 0) & (prev >= 0) & (out['close'] < out['sma'])
return out
なぜこの結果になったのか(3つの理由)
- 1この作戦の勝つ確率が、100回中15回くらいととても低かったのは、『CCI』が出すサインに「ウソのサイン」が多かったからかもしれません。特に、5分ごとのような短い時間で見ると、ほんの少しの値動きに反応しすぎてしまうことがあるんです。
- 2最終的に持っていたお金がほとんどなくなってしまったのは、負ける取引が多かった上に、勝ったときの利益よりも、負けたときの損失のほうが大きかったからです。これでは、取引すればするほど、お金が減ってしまいます。
- 3一番調子が悪かったとき、持っていたお金のほぼ全てを失いそうになったということは、この作戦には一度に大きな損をしてしまう危険があったということです。もしかしたら、「損切り」のルールがうまく働いていなかったのかもしれません。
この結果から学べる3つの教訓
- 1簡単な道具を組み合わせただけでは、いつでもうまくいくわけではない、ということです。マーケットの状況はいつも変わるので、作戦もそれに合わせて変えていく必要があります。
- 2勝つ回数が少なくても、一回でとても大きく勝てれば、全体としてプラスになることもあります。でも、この作戦は勝ちが小さく負けが大きかったので、結局マイナスになりました。勝つ回数だけでなく、利益と損失のバランスも大切です。
- 3どんなにすごい作戦でも、「損をできるだけ小さくする工夫(リスク管理)」を忘れると、あっという間にお金を失う危険がある、ということです。今回うまくいかなかったことが、その大切さを教えてくれています。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金を、持っているお金全体の1%や2%のように、ごく一部にすることです。こうすれば、もし負けてもダメージは小さくてすみます。
損失が大きくなったときの対処法
もし全体の資金が一定以上へってしまったら、一度取引をお休みして、作戦を見直すことです。冷静になる時間をつくることで、さらに大きな失敗を防ぎます。
資金管理の方法
「全体でこれ以上は損しない」という上限を決めておくことです。そして、もし利益が出たら、その一部は使わずに取っておくなど、長く続けていくためのお金の管理計画も大切です。
改良案の具体的提案
- 「ウソのサイン」をへらすために、他の道具(例えばMACDやRSIなど)も一緒に使って、もっと慎重に判断する方法が考えられます。
- 損切りのルールを「もっと早めにあきらめる」ように厳しくしたり、逆に利益が出ているときは「もっと利益を伸ばす」ための賢い方法を取り入れたりすることが考えられます。
- 道具の設定(数字)を変えてみたり、ビットコイン以外のコインや、5分ごとではなく1時間ごとのように違う条件で試したりすると、うまくいくパターンが見つかるかもしれません。
実用性の向上(運用上の注意)
- なぜこの作戦がうまくいかなかったのか、その原因をよく考えて、「こうすれば良くなるかも?」というアイデアをためしてみることが大切です。
- 実際のお金を使う前に、まずは過去のデータを使って「練習試合(バックテスト)」をたくさん行い、その作戦が本当にうまくいくのかをしっかり確かめましょう。
- この結果は、あくまで過去のデータでの話です。未来も同じようにうまくいくとは限りません。だから、いつでも注意することが必要です。
検証の透明性と信頼性
- データの出所: だれでも見ることができる、仮想通貨取引所の値段のデータを使っています。
- 検証のやり方: 過去の値段のデータを使って、もしこの作戦どおりに売買していたらどうなったかを、コンピューターで自動的に計算(シミュレーション)しました。
- コード: はい、このテストで使った作戦の詳しいルール(プログラムのコード)を見ることができます。
- 注意事項: この作戦は、過去のデータでためした結果なので、将来の利益を約束するものではありません。投資は、ご自身の判断と責任で行ってくださいね。