シェア:

ビットコインで挑戦!「買い手 vs 売り手」作戦の成績を見てみよう!

この作戦は、ビットコインの1時間ごとの値動きを見て、「買いたい人」と「売りたい人」のどちらが強いかをチェックする方法です。そして、売ったり買ったりするベストなタイミングを探します。実際に1年以上試してみたんですが、残念ながら結果はマイナスでした。でも、この失敗から学べることがたくさんありますよ!

取引数
684
勝率
20.03%
最終リターン
-91.36%
最大DD
91.37%

導入と前提条件

この作戦は、ビットコインの1時間ごとの値動きを見て、「買いたい人」と「売りたい人」のどちらが強いかをチェックする方法です。そして、売ったり買ったりするベストなタイミングを探します。実際に1年以上試してみたんですが、残念ながら結果はマイナスでした。でも、この失敗から学べることがたくさんありますよ!

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

  • 戦略名: Balance of Power を使用したトレンド追従戦略
  • 対象銘柄: BTC/USDT
  • 時間足: 1h
  • 期間: 2024-07-01〜2025-08-25(419日間)
  • 初期資金: $10,000
  • 手数料・スリッページ: 0.1% / 0.1%
  • 取引所: binance

Balance of Power の理論的背景

この作戦は、市場は「買いたい人」と「売りたい人」の綱引きで動く、という考え方が元になっています。例えば、1時間で値段が始まった時より終わった時の方が高ければ、「買いたい人」が綱引きで勝った、ということです。逆に安くなっていたら、「売りたい人」が勝ったことになります。この綱引きの勝敗を数字にして、その数字の平均を見ることで、全体の流れや急な変化をつかまえようとします。「買いたい人」の力がぐっと強くなったり、どちらかがすごく強くなりすぎた状態から普通に戻ったりするタイミングを、チャンスと考えるんです。

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

エントリー条件

  • 「買いたい人」が「売りたい人」より強くなった、というサインが出たとき。
  • 「売りたい人」の勢いがすごく強かった状態が終わり、今度は「買いたい人」の勢いが出てきたとき。

エグジット条件

  • 「売りたい人」が「買いたい人」より強くなった、というサインが出たとき。
  • 「買いたい人」の勢いがすごく強かった状態が終わり、今度は「売りたい人」の勢いが出てきたとき。

リスク管理

この作戦では、大きな損をしないためのルールを決めています。まず、損がふくらむ前に「手じまい(取引を終えること)」するタイミングを決めます。それに、もしもの時に損が大きくなりすぎないように、自分の持っているお金に合わせて、取引する量を調整します。もし負けが続いても、一度お休みしたり、取引する量を減らしたりして、さらに大きな損を防ぐようにします。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数684回
勝率20.03%
平均利益1.65%
平均損失-0.85%
期待値-0.35%
プロフィットファクター0.5
最大ドローダウン91.37%
最終リターン-91.36%
シャープレシオ-0.98
HODL(Buy&Hold)77.68%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Balance of Power Trading Signal Generator
買い手と売り手の力関係を測定
"""
import pandas as pd
import numpy as np


def calculate_bop_signals(df: pd.DataFrame,
                         smooth_period: int = 14) -> pd.DataFrame:
    """
    Balance of Power戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    smooth_period : int
        平滑化期間(デフォルト: 14)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # Balance of Power計算
    # BOP = (Close - Open) / (High - Low)
    df['bop_raw'] = (df['close'] - df['open']) / (df['high'] - df['low'] + 0.0001)
    
    # スムージング(SMA)
    df['bop'] = df['bop_raw'].rolling(window=smooth_period).mean()
    
    # BOPの移動平均(トレンド)
    df['bop_ma'] = df['bop'].rolling(window=smooth_period).mean()
    
    # BOPの標準偏差(ボラティリティ)
    df['bop_std'] = df['bop'].rolling(window=smooth_period * 2).std()
    
    # ダイナミックレベル
    df['bop_upper'] = df['bop_ma'] + df['bop_std']
    df['bop_lower'] = df['bop_ma'] - df['bop_std']
    
    # ゼロラインクロス
    df['bop_prev'] = df['bop'].shift(1)
    df['zero_cross_up'] = (df['bop'] > 0) & (df['bop_prev'] <= 0)
    df['zero_cross_down'] = (df['bop'] < 0) & (df['bop_prev'] >= 0)
    
    # エクストリーム反転
    df['extreme_low'] = df['bop'] < -0.5
    df['extreme_high'] = df['bop'] > 0.5
    df['extreme_low_prev'] = df['extreme_low'].shift(1)
    df['extreme_high_prev'] = df['extreme_high'].shift(1)
    
    # シグナル生成
    df['is_buy'] = (
        df['zero_cross_up'] | 
        (df['extreme_low_prev'] & ~df['extreme_low'])
    ) & df['bop'].notna()
    df['is_sell'] = (
        df['zero_cross_down'] | 
        (df['extreme_high_prev'] & ~df['extreme_high'])
    ) & df['bop'].notna()
    
    # 不要カラム削除
    df.drop(['bop_raw', 'bop_ma', 'bop_std', 'bop_upper', 'bop_lower', 'bop_prev',
             'zero_cross_up', 'zero_cross_down', 'extreme_low', 'extreme_high',
             'extreme_low_prev', 'extreme_high_prev'], axis=1, inplace=True, errors='ignore')
    
    return df

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

  1. 1勝った回数が少なくて、トータルで損をしてしまったのは、ビットコインの値段が、予想できないほど大きく動くことが多かったからだと考えられます。
  2. 2「買いたい人が強くなった」という単純なサインだけでは、「ダマシ」というニセモノのサインが多くて、それが損につながってしまったのかもしれません。
  3. 3「すごく売られた後に買う」という逆を狙うサインも、ビットコインの値段が一方的に上がり続けたり、下がり続けたりする場面では、うまく働かなかったのかもしれません。

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

  1. 1どんなに良さそうに見える作戦でも、その時の状況によっては、うまくいかないことがあると学びました。
  2. 2ひとつのサインだけを信じるんじゃなくて、市場全体の大きな流れや、他の情報も合わせて考えることが大事だと感じました。
  3. 3成績が悪くても、なぜダメだったのかを考えて、次に活かすことが大切だとわかりました。

リスク管理の具体的手法

取引量の決め方

1回の取引で、持っているお金の1%から2%より大きな損をしないように、買う量を決めます。例えば、10万円持っていたら、1回の失敗で損するお金が1000円から2000円に収まるようにします。

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

もし損が続いて、持っているお金が10%など、決めた割合以上に減ってしまったら、いったん全部の取引をやめます。そして、市場が落ち着くのを待つか、作戦をもう一度考え直します。

資金管理の方法

取引に使うお金は、もしなくなっても生活に困らないお金だけにします。利益が出ても、全部使ってしまうのではなく、一部は次の取引のためにとっておくなど、計画的にお金を管理します。

改良案の具体的提案

  • 力の平均を計算する期間を、短くしたり長くしたりして、もっと確実なサインを見つけられるように工夫する。
  • 値段の平均線など、他の作戦と組み合わせて、サインが本物かどうかを見分ける力をアップさせる。
  • 市場の動きが激しい時と、おだやかな時で、自動的にルールが変わるような仕組みを入れる。

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

  • この作戦を試すなら、まずはすごく少ないお金でやるか、本物のお金を使わない「練習モード」でやってみましょう。
  • ビットコインの値段がジェットコースターみたいに激しく動いているときは、この作戦がうまくいかないかもしれないので、注意してください。
  • 「いつ買うか」も大事ですが、「いつやめるか」という損切りのルールをしっかり決めておくことが、大きな損を防ぐために一番重要です。

検証の透明性と信頼性

  • データの出所: この成績は、過去のビットコインの値段のデータ(いつ始まって、いくらで終わって、一番高かったのはいくらで、一番安かったのはいくらか、という情報)を使って計算しました。
  • 検証のやり方: もしこの作戦を過去の特定の期間でやっていたらどうなっていたか、をコンピューターで試してみました(これをバックテストと言います)。
  • コード: この作戦を計算するためのコンピューターのプログラムは、誰でも見られるように公開されています。
  • 注意事項: この結果は、あくまで過去のデータで試したものです。未来でも同じようにうまくいくとは限りません。投資は、自分の判断と責任で行ってくださいね。

よくある質問

Q.この作戦は、ビットコイン以外でも使えるの?

A.はい、株や他の仮想通貨など、値段が動くものなら基本的には使えます。でも、それぞれにクセがあるので、どこでも同じようにうまくいくとは限りません。

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

A.はい、5回やって1回しか勝てない、ということなので、あまり良い成績とは言えません。勝つことよりも負けることの方が多い、という意味になります。

Q.「最大DD91%」ってどういう意味?

A.これは、一番お金が増えた時から、最大で91%もお金が減ってしまった時期があった、という意味です。例えば100万円が9万円になってしまったようなイメージで、ものすごく大きな損です。

Q.「HODL(ホドル)」って何?

A.ホドル(HODL)は、仮想通貨を売らずに、ずっと長く持っておくことです。「hold(持つ)」という言葉から生まれたネットの言葉です。今回の作戦は、ただずっと持っているよりも成績が悪かった、ということを示しています。

Q.どうすれば、もっと勝てるようになる?

A.勝てる確率を上げるには、売買のサインが本物か見分ける力をつけたり、負けた時の損をできるだけ小さくするルールを厳しくしたり、市場の様子に合わせて作戦を変えたりする工夫が必要だと思います。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報