ビットコインの「本当の勢い」を見つける作戦!中学生にもわかる投資の話
このお話は、ビットコインの1時間ごとの値段の動きを見て、値段がどっちに動くかの「本当の勢い」を見つけ出す作戦についてです。実際に、2025年5月8日から9月5日までの約4ヶ月間、この作戦を試してみたらどうなったか、わかりやすく説明しますね。
導入と前提条件
このお話は、ビットコインの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)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Weighted Close』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 146回 |
勝率 | 15.75% |
平均利益 | 1.24% |
平均損失 | -0.75% |
期待値 | -0.44% |
プロフィットファクター | 0.3 |
最大ドローダウン | 47.4% |
最終リターン | -47.29% |
シャープレシオ | -1.34 |
HODL(Buy&Hold) | 9.85% |
HODL戦略との比較
実装コード(Python)
"""
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この作戦は、勝てる確率が15.75%と、かなり低かったんです。つまり、ほとんどの取引で負けてしまったので、全体で大きなマイナス(-47.29%)になりました。
- 2「期待値」という、1回取引したら平均でどれくらい儲かるかを示す数字がマイナス(-0.44%)でした。これは、取引すればするほど、お金が少しずつ減ってしまう可能性があるということです。
- 3「PF(プロフィットファクター)」という、儲かったお金と損したお金のバランスを見る数字が0.3でした。これは1よりずっと小さいので、儲かった金額よりも、損した金額の方がかなり大きかったことを意味します。
この結果から学べる3つの教訓
- 1勝てる回数が少なくても、1回でとても大きく勝てれば、全体でプラスになる可能性もあるんだな、と学びました(今回はそうではありませんでしたが)。
- 2たくさん取引(146回)をしても、勝つ確率が低いと、負けがどんどん積み重なってしまうということが、よくわかりました。
- 3持っていたお金が、一番減った時には半分近く(最大DD 47.4%)もなくなってしまいました。このことから、この作戦はかなり危険な方法だったとわかりました。
リスク管理の具体的手法
取引量の決め方
1回のチャレンジで使うお金は、自分が持っているお金のほんの一部(例えば2%から5%)だけにします。もし1万円持っていたら、1回に使うのは200円から500円くらいにする、というルールです。
損失が大きくなったときの対処法
もし、持っているお金が10%減ってしまったら、一度すべての取引をお休みして、作戦をもう一度考え直します。今回はお金が半分近くも減ってしまったので、このルールは特に大事ですね。
資金管理の方法
おこづかいや、もしなくなっても生活に困らないお金で挑戦することが大切です。もし儲かったら、その一部は次のチャレンジのためにとっておき、一部は貯金するなど、上手にお金を管理することが大事です。
改良案の具体的提案
- 平均ラインを計算するときの期間(今回は20という数字を使いました)を変えたら、もっと良い結果になるか試してみます。
- この作戦だけでなく、他の道具(例えば、勢いの強さを数字で見る「モメンタム」など)と組み合わせて、もっとうまくいくタイミングを見つけられるように工夫します。
- 「これ以上損したら絶対にやめる(損切り)」というルールをもっと厳しくしたり、「これだけ儲かったら満足してやめる(利確)」という新しいルールを追加したりします。
実用性の向上(運用上の注意)
- この作戦は負けやすいので、うまくいかなくても焦ったりせず、落ち着いて考えることが大切です。
- 実際に自分のお金で試す前に、昔のデータを使って「この作戦で本当にうまくいったのかな?」と練習(バックテスト)してみることが重要です。
- この作戦だけに頼るのではなく、世の中のニュースを見たり、他の作戦と組み合わせたりして、色々な角度から考えるのが成功のコツです。
検証の透明性と信頼性
- データの出所: この分析では、ビットコインの1時間ごとの値段のデータを使いました。
- 検証のやり方: 2025年5月8日から9月5日までの過去のデータを使って、この作戦を試したらどうなるかをコンピューターでシミュレーション(バックテスト)しました。
- コード: この作戦をコンピューターで動かすための設計図(プログラムコード)は、誰でも見られるように公開されています。
- 注意事項: この説明は、あくまで分析の結果をお伝えするもので、「この方法で絶対儲かるよ」と約束するものではありません。投資は、値段が大きく変わって損をすることもあります。最後は、自分でよく考えて判断してくださいね。