シェア:

ビットコインの取引で大失敗? ある作戦の落とし穴から学ぼう!

今回は、ビットコインを5分ごとに売り買いする作戦を試したお話です。でも、この作戦はうまくいかなくて、ものすごく損をしてしまいました。どうして失敗しちゃったのか、この経験から何がわかるのか、一緒に見ていきましょう。

取引数
2455
勝率
12.67%
最終リターン
-99.99%
最大DD
99.99%

導入と前提条件

今回は、ビットコインを5分ごとに売り買いする作戦を試したお話です。でも、この作戦はうまくいかなくて、ものすごく損をしてしまいました。どうして失敗しちゃったのか、この経験から何がわかるのか、一緒に見ていきましょう。

【検証】戦略のバックテスト概要

  • 戦略名: Williams %R を使用したトレンド追従戦略
  • 対象銘柄: BTC/USDT
  • 時間足: 5m
  • 期間: 2024-10-06〜2025-08-25(323日間)
  • 初期資金: $10,000
  • 手数料・スリッページ: 0.1% / 0.1%
  • 取引所: bybit

Williams %R の理論的背景

もう少し詳しく説明しますね。「ウィリアムズ%R」は、最近の値段の中で一番高かった時と、一番安かった時を比べます。そして、今の値段がその中のどのへんにあるかを見るんです。もし一番高い値段に近ければ「買いすぎかも!」、一番安い値段に近ければ「売りすぎかも!」と教えてくれます。この作戦は、そのサインの逆を狙います。「売りすぎ」なら「これ以上は下がらないで、そろそろ上がるかも?」と考えて買い、「買いすぎ」なら「これ以上は上がらないで、そろそろ下がるかも?」と考えて売る、というわけです。

具体的な売買ルール(今回の検証)

エントリー条件

  • 「売りすぎ」を示す線より下にグラフが下がって、そのあとまた線より上に戻ってきたら『買い』の合図です。
  • 「買いすぎ」を示す線より上にグラフが上がって、そのあとまた線より下に戻ってきたら『売り』の合図です。

エグジット条件

  • 買った後、値段が上がってグラフが「買いすぎ」の線を超えたら、売って利益を確定します。
  • 売った後、値段が下がってグラフが「売りすぎ」の線より下に行ったら、買い戻して取引を終わりにします。

リスク管理

もし予想と違う方向に値段が動いてしまったら、すぐに取引をやめるのが大事です。これを「損切り」と言います。そうすれば、大きな損を防げます。あと、一度にたくさんのお金を使わずに、少しずつ取引することも大切ですよ。

再現手順(HowTo)

  1. Python/依存(ccxt, pandas, ta)をインストール
  2. ccxtでBTC/USDTのOHLCVを取得して前処理
  3. 『Williams %R』に必要な指標を算出(ta 等)
  4. 閾値・クロス条件から売買シグナルを生成
  5. 手数料・スリッページを加味して検証・評価

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数2455回
勝率12.67%
平均利益0.23%
平均損失-0.48%
期待値-0.39%
プロフィットファクター0.07
最大ドローダウン99.99%
最終リターン-99.99%
シャープレシオ-1.4
HODL(Buy&Hold)81.24%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/usr/bin/env python3
"""
ウィリアムズ%R戦略
価格の相対的位置で買われすぎ・売られすぎを判定
"""
import pandas as pd
import numpy as np


def calculate_williams_r_signals(df: pd.DataFrame, period: int = 14, 
                                oversold: float = -80, overbought: float = -20) -> pd.DataFrame:
    """
    ウィリアムズ%Rシグナルを生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        計算期間(デフォルト: 14)
    oversold : float
        売られすぎ水準(デフォルト: -80)
    overbought : float
        買われすぎ水準(デフォルト: -20)
    
    Returns:
    --------
    pd.DataFrame
        シグナル列が追加されたDataFrame
    """
    df = df.copy()
    
    # Williams %R計算
    highest_high = df['high'].rolling(window=period).max()
    lowest_low = df['low'].rolling(window=period).min()
    df['williams_r'] = -100 * ((highest_high - df['close']) / (highest_high - lowest_low))
    
    # シグナル生成
    df['is_buy'] = (
        (df['williams_r'] < oversold) & 
        (df['williams_r'].shift(1) >= oversold)
    )
    
    df['is_sell'] = (
        (df['williams_r'] > overbought) & 
        (df['williams_r'].shift(1) <= overbought)
    )
    
    # NaN値をFalseに置換
    df['is_buy'] = df['is_buy'].fillna(False)
    df['is_sell'] = df['is_sell'].fillna(False)
    
    print(f"Williams %R: 期間={period}, 売られすぎ={oversold}, 買われすぎ={overbought}")
    print(f"買いシグナル数: {df['is_buy'].sum()}")
    print(f"売りシグナル数: {df['is_sell'].sum()}")
    
    return df

なぜこの結果になったのか(3つの理由)

  1. 1この作戦は、値段が上がったり下がったりを繰り返すことを期待していました。でも実際には、値段が一つの方向にずっと動き続けることが多くて、うまく利益を出せませんでした。
  2. 2100回取引しても勝てたのは13回くらいで、ほとんどが負けでした。これでは、お金が増えるはずがありません。
  3. 3この作戦は、やればやるほどお金が減ってしまう仕組みになっていました。作戦そのものに問題があったようです。

この結果から学べる3つの教訓

  1. 1すごい専門家が考えたような作戦でも、必ずうまくいくわけじゃないんだ、とわかりました。
  2. 2うまくいかなかった時は、「なんでだろう?」と原因をしっかり考えて、次に活かすことが大切です。
  3. 3「買いすぎ」とか「売りすぎ」というサインだけで判断するのは、とても危ないことがあると学びました。

リスク管理の具体的手法

取引量の決め方

一度の取引で使うお金は、持っているお金全部の、ほんの少しだけ(例えば100分の1とか)にしましょう。そうすれば、もし負けても失うお金は少なくてすみます。

損失が大きくなったときの対処法

もし、損した金額が持っているお金の1割くらいになったら、いったん取引をお休みしましょう。そして、作戦が本当にこれでいいのか、もう一度じっくり考え直す時間を作ることが大事です。

資金管理の方法

取引で増えたお金は、全部を次の取引に使わずに、一部は貯金したり、もっと安全なものに使うなど、大切に管理しましょう。

改良案の具体的提案

  • この道具だけでなく、他の道具(例えば、値段の平均を見る『移動平均線』など)も一緒に使って、もっと確実なサインが出たときだけ取引するようにします。
  • 「これ以上損したらやめる」というルールをもっと厳しくします。小さな損で早くやめれば、大きな失敗を防げます。
  • いつでもこの作戦を使うのではなく、市場の雰囲気がいい時だけ使うなど、タイミングを考えることも大切です。

実用性の向上(運用上の注意)

  • この作戦を試してみたくなったら、まずは練習用の偽のお金で試すか、すごく少ない金額から始めてみましょう。
  • 取引をしたら、勝ち負けをノートに記録しておきましょう。後で見返すと、どうしてうまくいったのか、どうして失敗したのかがわかって勉強になります。
  • 世の中で何が起きているか、ニュースを見るのも大切です。大きな事件が値段に影響することもありますからね。

検証の透明性と信頼性

  • データの出所: このお話で使ったのは、過去のビットコインが実際にどう動いたかの記録データです。
  • 検証のやり方: 過去のデータを使って、『もしこの作戦を昔やっていたら、どうなっていたかな?』というコンピューターでの実験(シミュレーション)をしました。
  • コード: この実験で使ったコンピューターのプログラムは、誰でも見られるように公開されています。
  • 注意事項: このお話は、投資をオススメするものではありません。実際にお金の取引をするときは、自分でよく考えて、自分の責任で行ってください。昔うまくいったからといって、未来もうまくいくとは限りません。

よくある質問

Q.ウィリアムズ%Rって何?

A.最近の値段の動きを見て、「今、買われすぎかな?」「売られすぎかな?」というのを教えてくれる道具のことです。

Q.なんでこんなに損しちゃったの?

A.「そろそろ値段が反対に動くはず!」というサインが出ても、実際にはそのまま同じ方向に動き続けることが多くて、ほとんどの取引で負けてしまったからです。

Q.勝率12.67%って、どれくらい悪いの?

A.すごく悪いです。100回挑戦して13回くらいしか勝てなかった、ということです。ほとんど負けてばかりだったんですね。

Q.HODLって何?

A.「HODL」は英語の「HOLD(持つ)」から来た言葉で、ビットコインなどを買ったら売らずにずーっと持っておくことです。今回の作戦みたいに売り買いするより、ただ持っていた方がずっと良かった、という意味です。

Q.この作戦はもう使えないの?

A.このまま使うのは難しいかもしれません。でも、他の道具と組み合わせたり、ルールをもっと良くしたりすれば、将来うまくいく方法が見つかる可能性はあります。

Q.検証に使用した期間と時間足は?

A.5m足で検証しました。期間は記事内の概要をご確認ください。

Q.最終リターンと最大ドローダウンは?

A.最終リターンは-99.99%、最大DDは99.99%です。

Q.勝率やPFはどの程度?

A.勝率は12.67%、プロフィットファクターは0.07です。

Q.HODLとの比較結果は?

A.HODLは81.24%でした。記事内の比較表をご覧ください。

Q.手数料やスリッページは考慮済み?

A.はい。バックテスト設定の手数料・スリッページを損益に反映しています。

Q.市場環境はトレンド/レンジどちらに近かった?

A.期間中はトレンド優勢と推測されます。

Q.この戦略は初心者でも扱える?

A.基礎的な指標と検証環境の知識があれば扱えます。まずは少額・デモから。

Q.推奨のリスク管理は?

A.最大DDを踏まえた損切り・ポジションサイジングと、システム停止基準の設定を推奨します。

Q.将来の結果は期待できる?

A.過去の結果は将来を保証しません。市場環境やパラメータ適合性に大きく依存します。

Q.改良の方向性は?

A.トレンド・ボラティリティのフィルター併用、パラメータの再最適化、取引頻度の制御を検討してください。

著者情報