シェア:

ビットコインの「勢い」で売り買い!「ネットボリューム戦略」をわかりやすく解説

ビットコインの取引で、いつ買ったり売ったりすればいいか、そのタイミングを見つけるための「ネットボリューム戦略」っていう方法があるんだ。この方法がどんなもので、どうやって使うのか、そして実際にやってみたらどうだったのかを、わかりやすく説明するね。投資の基本的な考え方がわかるかもしれないよ!

取引数
233
勝率
15.45%
最終リターン
-57.55%
最大DD
57.77%

導入と前提条件

ビットコインの取引で、いつ買ったり売ったりすればいいか、そのタイミングを見つけるための「ネットボリューム戦略」っていう方法があるんだ。この方法がどんなもので、どうやって使うのか、そして実際にやってみたらどうだったのかを、わかりやすく説明するね。投資の基本的な考え方がわかるかもしれないよ!

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

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

Net Volume の理論的背景

この方法の考え方は、市場で「みんながどっち向きに、どれくらいの強さで動いているか」を知ることから始まるよ。値段が上がった日にたくさん取引されていたら、それは「買いたい!」と思っている人が多いサイン。逆に、値段が下がった日にたくさん取引されていたら、「売りたい!」と思っている人が多いってこと。この「買いたい勢い」と「売りたい勢い」の差を計算して、その流れが強くなった時に取引するんだ。ある期間(今回は14日間)の勢いの合計と、その平均を比べて、今の流れが強いかどうかを判断するんだよ。

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

エントリー条件

  • これまでの「勢いの合計」が、「勢いの平均」をぐんっと上回ったとき。これは「買い」のサインだよ!

エグジット条件

  • さっきとは反対に、これまでの「勢いの合計」が、「勢いの平均」を下回ったとき。持っていたビットコインを売るタイミングだよ。

リスク管理

一度に大金を使うんじゃなくて、少しずつ始めることが大事だよ。もし損が出始めたら、決めた金額以上は損しないように「ここまで来たらやめる」というルールを決めておくのも、大きな損を防ぐためにとっても重要なんだ。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数233回
勝率15.45%
平均利益1.29%
平均損失-0.67%
期待値-0.36%
プロフィットファクター0.35
最大ドローダウン57.77%
最終リターン-57.55%
シャープレシオ-1.71
HODL(Buy&Hold)16.66%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
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. 1勝った回数が15%くらいと低かったのは、この方法だと、本当に値段が上がる・下がるタイミングをうまくつかめなかったからみたい。ちょっとした値段の動きにだまされて、取引してしまうことが多かったのかもしれないね。
  2. 2全体としてマイナスになってしまったのは、取引の回数は多かったけど、もうけが出た取引よりも、損した取引のほうが多かったからなんだ。
  3. 3プロフィットファクターという数字が1よりずっと小さいのは、もうかった金額よりも、損した金額のほうがかなり大きかったってことを表しているよ。

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

  1. 1取引された量を見ることで、市場にどれくらい勢いがあるかを知ることの大切さがわかるよ。
  2. 2「勝った回数」だけじゃなくて、「全体でプラスになったか」みたいに、色々な角度から成績を見ることが大事なんだってわかるね。
  3. 3どんなに良さそうな方法でも、市場の状況によってはうまくいかない時もあるってことを知っておこう。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金は、持っているお金全部じゃなくて、ほんの少し(例えば100分の1とか)にすると、もし失敗しても大きな損になりにくいよ。

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

もし思ったより損が大きくなっちゃったら、一度取引をお休みして、どうしてうまくいかなかったのかをじっくり考えることが大切だよ。

資金管理の方法

生活に必要なお金は、投資には使わないようにしよう。なくなっても大丈夫な「余裕のあるお金」だけでやることが、安心して続けるためのコツだよ。

改良案の具体的提案

  • 「何日間のデータを見るか」みたいな設定を色々変えてみて、一番良い成績になる組み合わせを探してみる。
  • 他の方法(例えば、値段の平均線の動きを見る方法とか)と組み合わせて、もっと確かなタイミングで売り買いできるようにする。
  • 損が大きくなりすぎないように、「ここまで損したらやめる」っていうルールをもっと厳しくしてみる。

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

  • この結果は、あくまで昔のデータで試したものだから、これからも同じようにうまくいくとは限らないってことを覚えておいてね。
  • 取引を始める前には、必ず自分でその方法をしっかり理解して、「これなら大丈夫」って思ってから試すことが大事だよ。
  • まずはすごく少ない金額で試してみて、やり方に慣れてから、少しずつ金額を増やしていくのがおすすめだよ。

検証の透明性と信頼性

  • データの出所: ビットコインの1時間ごとの値段のデータを使って調べたよ。
  • 検証のやり方: 昔のデータを使って、「もしこの方法で取引していたら、どうなっていただろう?」っていうシミュレーションをしてみたんだ。
  • コード: このシミュレーションに使ったプログラムのコードも見れるようになっているよ。
  • 注意事項: この説明は、投資をすすめるものじゃないよ。投資には、お金が減ってしまうリスクがあるから、自分でよく考えて、自分の責任でやってくださいね。

よくある質問

Q.ネットボリュームって、どうやって計算するの?

A.値段が上がった時の取引の量から、値段が下がった時の取引の量を引き算して計算するんだよ。

Q.「累積ネットボリューム」って何?

A.毎回のネットボリュームを、これまでずっと足し算してきた合計のことだよ。

Q.「移動平均」って、どういう意味?

A.ある期間の数字の平均のことだよ。ここでは、14日間のネットボリュームの平均を出しているんだ。

Q.勝率が低いって、ダメな戦略なの?

A.勝った回数が少なくても、1回勝った時にすごく大きなもうけが出れば、全体としてはプラスになることもあるんだ。だから、勝った回数だけで良いか悪いかを決めるのはまだ早いんだよ。

Q.この戦略で本当にお金は稼げるの?

A.今回のデータで見る限りは、残念ながらうまくいかなかったみたい。でも、やり方を少し変えたり、他の方法と組み合わせたりすれば、うまくいく可能性はあるかもしれないよ。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報