シェア:

ビットコインの「本当の勢い」を見つける作戦!中学生にもわかる投資の話

このお話は、ビットコインの1時間ごとの値段の動きを見て、値段がどっちに動くかの「本当の勢い」を見つけ出す作戦についてです。実際に、2025年5月8日から9月5日までの約4ヶ月間、この作戦を試してみたらどうなったか、わかりやすく説明しますね。

取引数
146
勝率
15.75%
最終リターン
-47.29%
最大DD
47.40%

導入と前提条件

このお話は、ビットコインの1時間ごとの値段の動きを見て、値段がどっちに動くかの「本当の勢い」を見つけ出す作戦についてです。実際に、2025年5月8日から9月5日までの約4ヶ月間、この作戦を試してみたらどうなったか、わかりやすく説明しますね。

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

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

Weighted Close の理論的背景

ビットコインみたいなものの値段は、その日の一番高かった値段や安かった値段、終わりの値段など、色々な情報で決まります。この作戦で使う「加重終値」は、特に「終わりの値段」を少しだけ重要だと考えて計算する方法です。例えば、終わりの値段がその日の一番高い値段に近かったら、「今日は値段が上がる勢いが強かったんだな」と考えます。この加重終値が、平均のラインよりも上に行ったら「もっと値段が上がりそう!」と考えて「買う」タイミングにします。逆に、平均ラインより下に行ったら「値段が下がりそう…」と考えて「売る」タイミングにする、という考え方です。これは、値段が一つの方向に進む「勢い」を利用した作戦なんです。

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

エントリー条件

  • 「加重終値」の線が、その平均のラインを、下から上に追い抜いたときが「買う」合図です。
  • その前の瞬間までは、「加重終値」が平均のラインより下にいたことを確認します。追い抜いた瞬間を狙うためです。

エグジット条件

  • 「加重終値」の線が、その平均のラインを、上から下に割り込んだときが「やめる(売る)」合図です。
  • その前の瞬間までは、「加重終値」が平均のラインより上にいたことを確認します。割り込んだ瞬間を狙うためです。

リスク管理

この作戦は、やってみた結果、100回中15回くらいしか勝てませんでした(勝率15.75%)。なので、1回のチャレンジで大きく損をしないように気をつけることがとても大事です。損を小さくするためには、一度にたくさんのお金を使わず、自分の持っているお金の範囲で、少しずつ試すことが大切です。もし、思ったのと反対に値段が動いてしまったら、早めに「やーめた!」と決める勇気も必要ですよ。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数146回
勝率15.75%
平均利益1.24%
平均損失-0.75%
期待値-0.44%
プロフィットファクター0.3
最大ドローダウン47.4%
最終リターン-47.29%
シャープレシオ-1.34
HODL(Buy&Hold)9.85%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Weighted Close Trading Signal
加重終値を使用したトレード
"""
import pandas as pd
import numpy as np


def calculate_weighted_close_signals(df: pd.DataFrame,
                                  period: int = 20) -> pd.DataFrame:
    """
    Weighted Close戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        移動平均期間(デフォルト: 20)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # Weighted Close
    df['wc'] = (df['high'] + df['low'] + df['close'] * 2) / 4
    
    # MA of Weighted Close
    df['wc_ma'] = df['wc'].rolling(window=period).mean()
    
    # シグナル初期化
    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['wc'].iloc[i] > df['wc_ma'].iloc[i] and df['wc'].iloc[i-1] <= df['wc_ma'].iloc[i-1]:
            df.loc[df.index[i], 'is_buy'] = True
            df.loc[df.index[i], 'signal'] = 1
            position = 1
            
        # 売りシグナル
        elif position >= 0 and df['wc'].iloc[i] < df['wc_ma'].iloc[i] and df['wc'].iloc[i-1] >= df['wc_ma'].iloc[i-1]:
            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



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

  1. 1この作戦は、勝てる確率が15.75%と、かなり低かったんです。つまり、ほとんどの取引で負けてしまったので、全体で大きなマイナス(-47.29%)になりました。
  2. 2「期待値」という、1回取引したら平均でどれくらい儲かるかを示す数字がマイナス(-0.44%)でした。これは、取引すればするほど、お金が少しずつ減ってしまう可能性があるということです。
  3. 3「PF(プロフィットファクター)」という、儲かったお金と損したお金のバランスを見る数字が0.3でした。これは1よりずっと小さいので、儲かった金額よりも、損した金額の方がかなり大きかったことを意味します。

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

  1. 1勝てる回数が少なくても、1回でとても大きく勝てれば、全体でプラスになる可能性もあるんだな、と学びました(今回はそうではありませんでしたが)。
  2. 2たくさん取引(146回)をしても、勝つ確率が低いと、負けがどんどん積み重なってしまうということが、よくわかりました。
  3. 3持っていたお金が、一番減った時には半分近く(最大DD 47.4%)もなくなってしまいました。このことから、この作戦はかなり危険な方法だったとわかりました。

リスク管理の具体的手法

取引量の決め方

1回のチャレンジで使うお金は、自分が持っているお金のほんの一部(例えば2%から5%)だけにします。もし1万円持っていたら、1回に使うのは200円から500円くらいにする、というルールです。

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

もし、持っているお金が10%減ってしまったら、一度すべての取引をお休みして、作戦をもう一度考え直します。今回はお金が半分近くも減ってしまったので、このルールは特に大事ですね。

資金管理の方法

おこづかいや、もしなくなっても生活に困らないお金で挑戦することが大切です。もし儲かったら、その一部は次のチャレンジのためにとっておき、一部は貯金するなど、上手にお金を管理することが大事です。

改良案の具体的提案

  • 平均ラインを計算するときの期間(今回は20という数字を使いました)を変えたら、もっと良い結果になるか試してみます。
  • この作戦だけでなく、他の道具(例えば、勢いの強さを数字で見る「モメンタム」など)と組み合わせて、もっとうまくいくタイミングを見つけられるように工夫します。
  • 「これ以上損したら絶対にやめる(損切り)」というルールをもっと厳しくしたり、「これだけ儲かったら満足してやめる(利確)」という新しいルールを追加したりします。

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

  • この作戦は負けやすいので、うまくいかなくても焦ったりせず、落ち着いて考えることが大切です。
  • 実際に自分のお金で試す前に、昔のデータを使って「この作戦で本当にうまくいったのかな?」と練習(バックテスト)してみることが重要です。
  • この作戦だけに頼るのではなく、世の中のニュースを見たり、他の作戦と組み合わせたりして、色々な角度から考えるのが成功のコツです。

検証の透明性と信頼性

  • データの出所: この分析では、ビットコインの1時間ごとの値段のデータを使いました。
  • 検証のやり方: 2025年5月8日から9月5日までの過去のデータを使って、この作戦を試したらどうなるかをコンピューターでシミュレーション(バックテスト)しました。
  • コード: この作戦をコンピューターで動かすための設計図(プログラムコード)は、誰でも見られるように公開されています。
  • 注意事項: この説明は、あくまで分析の結果をお伝えするもので、「この方法で絶対儲かるよ」と約束するものではありません。投資は、値段が大きく変わって損をすることもあります。最後は、自分でよく考えて判断してくださいね。

よくある質問

Q.「加重終値(かじゅうおわりね)」って、どうやって計算するの?

A.「その時間で一番高かった値段」と「一番安かった値段」、それに「終わりの値段」を2回分、ぜんぶを足して4で割った数字のことだよ。終わりの値段をちょっとだけ特別扱いして、その時間の本当の勢いを見ようとする計算方法なんだ。

Q.「移動平均(いどうへいきん)」って何?

A.ある期間の値段の平均のことだよ。例えば「20時間の移動平均」なら、過去20時間分の値段をぜんぶ足して20で割るんだ。グラフにすると線になって、値段の大きな流れがわかりやすくなるんだよ。

Q.勝率が低いって、どんな意味?

A.チャレンジした回数のうち、うまくいって儲かった回数の割合が低いってことだよ。今回の作戦だと、100回チャレンジしたら、15回くらいしか勝てなかった、ということになるんだ。

Q.「期待値」がマイナスって、どういうこと?

A.1回チャレンジするたびに、平均するとちょっとずつ損しちゃう可能性が高い、ということだよ。ゲームで言うと、参加するたびに参加費より少ない景品しかもらえない、みたいなイメージかな。

Q.「PF」って何?

A.「プロフィットファクター」のことで、「儲かったお金の合計」を「損したお金の合計」で割った数字だよ。これが1より小さいと、儲けよりも損のほうが大きかったってこと。今回は0.3だったから、かなり損のほうが大きかったんだ。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報