ビットコインの「勢い」で売り買い!「ネットボリューム戦略」をわかりやすく解説
ビットコインの取引で、いつ買ったり売ったりすればいいか、そのタイミングを見つけるための「ネットボリューム戦略」っていう方法があるんだ。この方法がどんなもので、どうやって使うのか、そして実際にやってみたらどうだったのかを、わかりやすく説明するね。投資の基本的な考え方がわかるかもしれないよ!
導入と前提条件
ビットコインの取引で、いつ買ったり売ったりすればいいか、そのタイミングを見つけるための「ネットボリューム戦略」っていう方法があるんだ。この方法がどんなもので、どうやって使うのか、そして実際にやってみたらどうだったのかを、わかりやすく説明するね。投資の基本的な考え方がわかるかもしれないよ!
【検証】戦略のバックテスト概要
- 戦略名: Net Volume を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 1h
- 期間: 2025-04-28〜2025-08-26(119日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
Net Volume の理論的背景
この方法の考え方は、市場で「みんながどっち向きに、どれくらいの強さで動いているか」を知ることから始まるよ。値段が上がった日にたくさん取引されていたら、それは「買いたい!」と思っている人が多いサイン。逆に、値段が下がった日にたくさん取引されていたら、「売りたい!」と思っている人が多いってこと。この「買いたい勢い」と「売りたい勢い」の差を計算して、その流れが強くなった時に取引するんだ。ある期間(今回は14日間)の勢いの合計と、その平均を比べて、今の流れが強いかどうかを判断するんだよ。
具体的な売買ルール(今回の検証)
エントリー条件
- これまでの「勢いの合計」が、「勢いの平均」をぐんっと上回ったとき。これは「買い」のサインだよ!
エグジット条件
- さっきとは反対に、これまでの「勢いの合計」が、「勢いの平均」を下回ったとき。持っていたビットコインを売るタイミングだよ。
リスク管理
一度に大金を使うんじゃなくて、少しずつ始めることが大事だよ。もし損が出始めたら、決めた金額以上は損しないように「ここまで来たらやめる」というルールを決めておくのも、大きな損を防ぐためにとっても重要なんだ。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Net Volume』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 233回 |
勝率 | 15.45% |
平均利益 | 1.29% |
平均損失 | -0.67% |
期待値 | -0.36% |
プロフィットファクター | 0.35 |
最大ドローダウン | 57.77% |
最終リターン | -57.55% |
シャープレシオ | -1.71 |
HODL(Buy&Hold) | 16.66% |
HODL戦略との比較
実装コード(Python)
"""
Net Volume Trading Signal
ネットボリューム指標によるトレンド判定
"""
import pandas as pd
import numpy as np
def calculate_net_volume_signals(df: pd.DataFrame,
period: int = 14) -> pd.DataFrame:
"""
Net Volume戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
period : int
計算期間(デフォルト: 14)
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# 価格変化
df['price_change'] = df['close'] - df['close'].shift(1)
# ネットボリューム
df['net_volume'] = np.where(df['price_change'] > 0, df['volume'],
np.where(df['price_change'] < 0, -df['volume'], 0))
# 累積ネットボリューム
df['cumulative_net_volume'] = df['net_volume'].cumsum()
# ネットボリュームのMA
df['nv_ma'] = df['cumulative_net_volume'].rolling(window=period).mean()
# シグナル初期化
df['signal'] = 0
df['is_buy'] = False
df['is_sell'] = False
position = 0
for i in range(period + 1, len(df)):
# 買いシグナル
if position <= 0 and df['cumulative_net_volume'].iloc[i] > df['nv_ma'].iloc[i] and \
df['cumulative_net_volume'].iloc[i-1] <= df['nv_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['cumulative_net_volume'].iloc[i] < df['nv_ma'].iloc[i] and \
df['cumulative_net_volume'].iloc[i-1] >= df['nv_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
def get_strategy_name() -> str:
"""戦略名を返す"""
return "Net Volume"
def get_strategy_description() -> str:
"""戦略の説明を返す"""
return "ネットボリューム指標によるトレンド判定戦略"
なぜこの結果になったのか(3つの理由)
- 1勝った回数が15%くらいと低かったのは、この方法だと、本当に値段が上がる・下がるタイミングをうまくつかめなかったからみたい。ちょっとした値段の動きにだまされて、取引してしまうことが多かったのかもしれないね。
- 2全体としてマイナスになってしまったのは、取引の回数は多かったけど、もうけが出た取引よりも、損した取引のほうが多かったからなんだ。
- 3プロフィットファクターという数字が1よりずっと小さいのは、もうかった金額よりも、損した金額のほうがかなり大きかったってことを表しているよ。
この結果から学べる3つの教訓
- 1取引された量を見ることで、市場にどれくらい勢いがあるかを知ることの大切さがわかるよ。
- 2「勝った回数」だけじゃなくて、「全体でプラスになったか」みたいに、色々な角度から成績を見ることが大事なんだってわかるね。
- 3どんなに良さそうな方法でも、市場の状況によってはうまくいかない時もあるってことを知っておこう。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金は、持っているお金全部じゃなくて、ほんの少し(例えば100分の1とか)にすると、もし失敗しても大きな損になりにくいよ。
損失が大きくなったときの対処法
もし思ったより損が大きくなっちゃったら、一度取引をお休みして、どうしてうまくいかなかったのかをじっくり考えることが大切だよ。
資金管理の方法
生活に必要なお金は、投資には使わないようにしよう。なくなっても大丈夫な「余裕のあるお金」だけでやることが、安心して続けるためのコツだよ。
改良案の具体的提案
- 「何日間のデータを見るか」みたいな設定を色々変えてみて、一番良い成績になる組み合わせを探してみる。
- 他の方法(例えば、値段の平均線の動きを見る方法とか)と組み合わせて、もっと確かなタイミングで売り買いできるようにする。
- 損が大きくなりすぎないように、「ここまで損したらやめる」っていうルールをもっと厳しくしてみる。
実用性の向上(運用上の注意)
- この結果は、あくまで昔のデータで試したものだから、これからも同じようにうまくいくとは限らないってことを覚えておいてね。
- 取引を始める前には、必ず自分でその方法をしっかり理解して、「これなら大丈夫」って思ってから試すことが大事だよ。
- まずはすごく少ない金額で試してみて、やり方に慣れてから、少しずつ金額を増やしていくのがおすすめだよ。
検証の透明性と信頼性
- データの出所: ビットコインの1時間ごとの値段のデータを使って調べたよ。
- 検証のやり方: 昔のデータを使って、「もしこの方法で取引していたら、どうなっていただろう?」っていうシミュレーションをしてみたんだ。
- コード: このシミュレーションに使ったプログラムのコードも見れるようになっているよ。
- 注意事項: この説明は、投資をすすめるものじゃないよ。投資には、お金が減ってしまうリスクがあるから、自分でよく考えて、自分の責任でやってくださいね。