ビットコインの「勢い」と「人気」でチャンスを見つける!中学生にもわかるお金の増やし方
このお話は、ビットコインの1時間ごとの値段の動きを使った作戦です。「値段の勢い」と「取引の人気度」という2つのヒントから、いつ買うか、いつ売るかを見つける方法です。この作戦が、ある4ヶ月間でどれくらい上手くいったか、結果を見てみましょう!
導入と前提条件
このお話は、ビットコインの1時間ごとの値段の動きを使った作戦です。「値段の勢い」と「取引の人気度」という2つのヒントから、いつ買うか、いつ売るかを見つける方法です。この作戦が、ある4ヶ月間でどれくらい上手くいったか、結果を見てみましょう!
【検証】戦略のバックテスト概要
- 戦略名: Volume Weighted Momentum を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 1h
- 期間: 2025-05-08〜2025-09-05(119日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
Volume Weighted Momentum の理論的背景
この作戦の基本的な考え方は、「値段の勢い」と「取引の量」に、未来の動きのヒントが隠されている、というものです。まず「取引の量を考えた平均の値段」という特別な平均値を出します。今の値段がその特別な平均値よりどれくらい上か下かを見ることで、「値段の勢い」を数字で表します。さらに、「取引量チェック」で、今の取引の量が最近の平均より多いかを確かめます。取引が多いのは、たくさんの人が注目している証拠なので、値段の勢いが本物だと信じやすくなります。この2つの条件を組み合わせることで、もっと成功しそうなタイミングを見つけようとしています。
具体的な売買ルール(今回の検証)
エントリー条件
- 値段が「上がる勢い」があって、しかも取引の量が「いつもより多い」ときに『買い』のサインが出ます。
- 値段が「下がる勢い」のときは、まだ何も持っていなければ何もしません。
エグジット条件
- 持っているビットコインに「下がる勢い」が出てきたら、『売り』のサインです。ここで売って取引を終わりにします。
- まだ何も持っていない状態で「上がる勢い」があっても、何もしません。
リスク管理
もし予想が外れても、大きな損をしないためのルールもあります。たとえば、資産が一時的に11%くらい減ってしまう可能性があったので、それ以上損が大きくならないように気をつけています。これは「大失敗」を防ぐための大事なブレーキのようなものです。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Volume Weighted Momentum』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 17回 |
勝率 | 23.53% |
平均利益 | 6.2% |
平均損失 | -1.49% |
期待値 | 0.32% |
プロフィットファクター | 1.19 |
最大ドローダウン | 10.98% |
最終リターン | 4.13% |
シャープレシオ | 0.11 |
HODL(Buy&Hold) | 9.87% |
HODL戦略との比較
実装コード(Python)
"""
Volume Weighted Momentum Trading Signal
出来高加重モメンタム指標
"""
import pandas as pd
import numpy as np
def calculate_volume_weighted_momentum_signals(df: pd.DataFrame,
period: int = 20,
volume_ma: int = 50) -> pd.DataFrame:
"""
Volume Weighted Momentum戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
period : int
モメンタム計算期間(デフォルト: 20)
volume_ma : int
出来高移動平均期間(デフォルト: 50)
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# 出来高加重価格
df['vwp'] = (df['close'] * df['volume']).rolling(window=period).sum() / df['volume'].rolling(window=period).sum()
# 出来高加重モメンタム
df['vw_momentum'] = (df['close'] - df['vwp']) / df['vwp']
# 出来高フィルター
df['volume_ma'] = df['volume'].rolling(window=volume_ma).mean()
df['volume_filter'] = df['volume'] > df['volume_ma']
# シグナル初期化
df['signal'] = 0
df['is_buy'] = False
df['is_sell'] = False
position = 0
for i in range(max(period, volume_ma), len(df)):
# 買いシグナル
if position <= 0 and df['vw_momentum'].iloc[i] > 0.01 and df['volume_filter'].iloc[i]:
df.loc[df.index[i], 'is_buy'] = True
df.loc[df.index[i], 'signal'] = 1
position = 1
# 売りシグナル
elif position >= 0 and df['vw_momentum'].iloc[i] < -0.01:
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値段の勢いだけでなく、「本当に人気があるか?」を取引の量でチェックしているので、一瞬だけ値段が動くような「だまし」に引っかかりにくかったのかもしれません。
- 2勝つ確率は24%くらいで、4回に1回くらいしか勝てません。でも、勝つときの利益が大きいため、負けた分を取り返して、全体ではプラスになったと考えられます。
- 3ただビットコインをずっと持っているだけの場合よりも、この作戦で買ったり売ったりしたほうが、最終的にお金が増えました。うまくタイミングを掴めたということです。
この結果から学べる3つの教訓
- 1値段の動きの勢いだけでなく、「どれくらいの人が参加しているか」という取引の量も見ると、もっと成功しやすいタイミングが見つかるということです。
- 2毎回勝てなくても大丈夫です。小さくたくさん負けても、一回大きく勝てば、トータルでプラスにできるということです。
- 3この作戦がいつでもうまくいくとは限りません。世の中の動きを見ながら、作戦をテストして、もっと良くしていくことが大切です。
リスク管理の具体的手法
取引量の決め方
1回の挑戦で、どれくらいの金額を使うかというお金の量の話です。もし負けても大丈夫なように、例えば「全財産の1%まで」のように、自分で上限を決めておくのが安全なやり方です。
損失が大きくなったときの対処法
この作戦を使っていると、持っているお金が一時的に最大で11%くらい減ってしまう可能性がある、ということです。もしこれ以上お金が減ってしまうようなら、一度お休みして、作戦を見直す必要があるかもしれません。
資金管理の方法
この作戦のテスト結果は「4.13%お金が増えた」というものでした。でも、実際にやるときは、なくなっても困らないお金(おこづかいの範囲など)で、少しずつ試すことがとても大切です。
改良案の具体的提案
- 勝つ確率が低いので、「買い」や「売り」のサインが出る条件を、もう少し厳しくしたり、逆に少しゆるくしたりして、もっと良いバランスを探すことができます。
- 一番悪かったときで、資産が約11%も減ってしまいました。これをもっと小さくするために、「ここまで損したらやめる」というルールをもっと早く設定するなどの工夫ができます。
- この作戦が得意な場面(例:値段が大きく動いているとき)と、苦手な場面があるかもしれません。得意な場面だけで使うようにすれば、もっと成績が上がる可能性があります。
実用性の向上(運用上の注意)
- この作戦は1時間ごとの値段の動きを見ています。チャンスを逃さないように、1日に何回か値段のグラフ(チャート)をチェックすると良いですよ。
- 「買い」のサインが出ても、すぐに飛びつかないでください。世の中で大きなニュースがないか、全体の雰囲気はどうか、なども少し気にすると、もっと良い判断ができるかもしれません。
- いきなり大きなお金でやるのは危険です。まずはジュース1本分くらいのとても少ない金額で試して、慣れてから少しずつ金額を増やすのが安全です。
検証の透明性と信頼性
- データの出所: このテストで使ったのは、ビットコインの1時間ごとの値段の動きの記録です。どこから取ってきた記録かは書いてありませんが、ふつうは取引所という会社が公開しているデータを使います。
- 検証のやり方: この作戦の成績は、過去のデータを使って「もしこの作戦をあの時にやっていたらどうなっていたか?」をコンピューターで試してみて(シミュレーション)、計算したものです。
- コード: この作戦を計算するためのプログラム(Pythonコード)も公開されています。プログラミングに興味があれば、自分で動かしたり、もっと良くしたりすることもできますよ。
- 注意事項: これは、あくまで昔のデータで試した結果です。「未来も絶対に儲かりますよ」というお約束ではありません。お金を増やす挑戦には、損をする可能性もあります。やるときは、自分でよく考えて、自分の責任で行ってくださいね。