値段の勢いと平均線で売り買い! BNBっていう仮想通貨で挑戦した記録
この記録は、「BNB」っていう仮想通貨の5分ごとのグラフを使って、「OBV MA Crossover」っていう売り買いのルールを試した結果です。約1年半で6800回も取引したんですけど、残念ながら、思ったような良い結果にはなりませんでした。この挑戦から何が学べるか、一緒に見ていきましょう。
導入と前提条件
この記録は、「BNB」っていう仮想通貨の5分ごとのグラフを使って、「OBV MA Crossover」っていう売り買いのルールを試した結果です。約1年半で6800回も取引したんですけど、残念ながら、思ったような良い結果にはなりませんでした。この挑戦から何が学べるか、一緒に見ていきましょう。
【検証】戦略のバックテスト概要
- 戦略名: OBV MA Crossover を使用したトレンド追従戦略
- 対象銘柄: BNB/USDT
- 時間足: 5m
- 期間: 2024-05-07〜2025-08-25(475日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: okx
OBV MA Crossover の理論的背景
「OBV」っていうのは、値段が上がった日の取引された量と、下がった日の取引された量を計算して、今の勢いを調べる道具です。値段が上がった日はその分を足して、下がった日は引く、ということを繰り返します。こうすると、買いの勢いが強いのか、売りの勢いが強いのかが見えてきます。このOBVの線と、その平均の線が交わったタイミングを、売り買いの合図にするのがこの作戦の考え方です。OBVが平均の線を上回ったら「買う人が増えてきたぞ!」、下回ったら「売る人が増えてきたぞ!」と判断するんです。
具体的な売買ルール(今回の検証)
エントリー条件
- OBVの線が、平均の線を下から上に追い越したとき(よし、買おう!という合図)
- OBVの線が、平均の線を上から下に追い越したとき(よし、売ろう!という合図)
エグジット条件
- 買っているときに、OBVの線が平均の線を下回ったとき(取引をやめる合図)
- 売っているときに、OBVの線が平均の線を上回ったとき(取引をやめる合図)
- もうけが出ているときに、決めておいた金額までもうかったとき(取引をやめる合図)
- 損しているときに、決めておいた金額まで損しちゃったとき(取引をやめる合図)
リスク管理
今回は、たくさん取引したのに勝てたのが10回に1回くらいだったので、全体として損が大きくなってしまいました。損を大きくしないためには、1回の取引で失うお金を少なくしたり、「損切り」っていう「これ以上損が大きくならないように、あきらめて取引をやめる」ルールをちゃんと守ることが大切です。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBNB/USDTのOHLCVを取得して前処理
- 『OBV MA Crossover』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 6800回 |
勝率 | 10.76% |
平均利益 | 0.6% |
平均損失 | -0.52% |
期待値 | -0.4% |
プロフィットファクター | 0.08 |
最大ドローダウン | 100% |
最終リターン | -100% |
シャープレシオ | -2.49 |
HODL(Buy&Hold) | 48.67% |
HODL戦略との比較
実装コード(Python)
"""
OBV MA Crossover
OBVとそのSMAのクロスで判定するのだ。
"""
import pandas as pd
def _obv(df: pd.DataFrame) -> pd.Series:
direction = df['close'].diff().apply(lambda x: 1 if x > 0 else (-1 if x < 0 else 0))
return (direction * df['volume']).cumsum()
def calculate_obv_ma_signals(df: pd.DataFrame, ma_period: int = 20) -> pd.DataFrame:
out = df.copy()
out['obv'] = _obv(out)
out['obv_ma'] = out['obv'].rolling(ma_period).mean()
prev = (out['obv'] - out['obv_ma']).shift(1)
now = out['obv'] - out['obv_ma']
out['is_buy'] = (now > 0) & (prev <= 0)
out['is_sell'] = (now < 0) & (prev >= 0)
return out
なぜこの結果になったのか(3つの理由)
- 1取引の回数が6800回とすごく多いのに、勝てたのは10回に1回くらいでした。だから、ほとんどの取引で少しずつ損が積み重なってしまいました。
- 2「期待値」っていう、1回の取引でどれくらいもうかるかの平均がマイナスでした。つまり、やればやるほど損をする可能性が高い作戦だったということです。
- 3「最大DD」っていう、一番大きくお金が減った割合が100%でした。これは、最初に持っていたお金が全部なくなってしまうほど、大きな損をしたことがある、ということです。
この結果から学べる3つの教訓
- 1「OBV MA Crossover」みたいなシンプルなルールだけでは、うまくいくとは限らないことがわかりました。
- 2たくさん取引する作戦でも、勝てる確率が低いと、結局は大きく損をしてしまうことがあると学びました。
- 3この作戦の成績は、ただ買ってずっと持っているだけ(HODL)よりも悪かったです。つまり、何もしない方がマシだった、ということです。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金の量を調整することです。もし損しても大丈夫なように、例えば「持っているお金の1%までしか使わない」と決めておきます。今回の結果を見ると、1回に使うお金が多すぎたのかもしれません。
損失が大きくなったときの対処法
もし損がどんどん大きくなってきたら、一度取引をお休みするなど、冷静になることが大事です。今回、お金が全部なくなるくらい損したのは、このコントロールがうまくできなかったからかもしれません。
資金管理の方法
取引に使うお金は、あらかじめ「ここまで」と決めておくことが大切です。勝っているときも負けているときも、うれしくなったり焦ったりしないで、最初に決めたルール通りにお金を管理することが重要です。
改良案の具体的提案
- OBVの平均線を計算する期間の設定を変えてみて、もっと良い結果が出るか試してみる。
- 他の道具(例えば、買われすぎか売られすぎかを見る「RSI」など)と組み合わせて、もっと確実なタイミングで売り買いできるようにする。
- 値段の動きが激しいときと、おだやかなときで、作戦を使い分けることを考えてみる。
実用性の向上(運用上の注意)
- この作戦は、今回の結果を見る限り、このまま使うのは危ないです。もっと良くする必要があります。
- たくさん取引する作戦は、毎回かかる手数料もばかになりません。その分も考えて作戦を立てる必要があります。
- 今回テストした期間だけの結果を信じすぎないで、他の色々な期間でも試してみることが大切です。
検証の透明性と信頼性
- データの出所: 使ったデータは、「BNB」っていう仮想通貨の5分ごとの値段の動きのデータです。
- 検証のやり方: 取引の回数や勝てた割合などの成績データをもとにして、この作戦がうまくいったかどうかを調べています。
- コード: このテストに使ったコンピュータのプログラムも公開されています。
- 注意事項: これは大切な注意書きです。この記録は、昔のデータで試した結果です。だから、未来も同じようにもうかることを約束するものではありません。投資は、自分の判断と責任で行ってくださいね。