ビットコインの「勢い」で挑戦!ある作戦のひみつ
この作戦は、ビットコインが1時間ごとにどう動くかを観察して、「いつ買って、いつ売るか」を見つける方法です。昔のデータを使って、この作戦がどれくらいうまくいくのか試してみました。
導入と前提条件
この作戦は、ビットコインが1時間ごとにどう動くかを観察して、「いつ買って、いつ売るか」を見つける方法です。昔のデータを使って、この作戦がどれくらいうまくいくのか試してみました。
【検証】戦略のバックテスト概要
- 戦略名: ROC Momentum を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 1h
- 期間: 2025-04-27〜2025-08-25(119日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
ROC Momentum の理論的背景
この作戦の基本は、「勢いがついたものは、しばらくそのままで進むことが多い」という考え方です。例えば、坂道を転がり始めたボールが、しばらくそのまま転がり続けるのに似ています。ビットコインの値段も、急に上がり始めたら、しばらく上がり続けることが多いと考えられます。この「勢い」を数字にしたものが「ROC」という道具です。この数字がある決まったラインより上になったら「買いの合図」、下になったら「売りの合図」と判断します。さらに、値段の動きの激しさも考えに入れて、もっと上手にタイミングをつかもうとしています。
具体的な売買ルール(今回の検証)
エントリー条件
- 値段の「勢い」を表す数字が、決めておいた「ここからが買い時!」というラインを、ポンと上回った瞬間に買います。
- (今回の作戦では、買うときの合図はこれだけです)
エグジット条件
- 値段の「勢い」を表す数字が、決めておいた「勢いが弱まった」というラインを、スッと下回った瞬間に売ります。
- (今回の作戦では、売るときの合図はこれだけです)
リスク管理
もし予想と反対に値段が動いて損をしそうになったら、すぐに売り買いをやめて、損が大きくならないようにします。この作戦では、そのルールが自動で働くようになっているので、大きな失敗を防ぎやすくなっています。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『ROC Momentum』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 55回 |
勝率 | 29.09% |
平均利益 | 2.01% |
平均損失 | -1.2% |
期待値 | -0.27% |
プロフィットファクター | 0.67 |
最大ドローダウン | 19.86% |
最終リターン | -14.67% |
シャープレシオ | -0.31 |
HODL(Buy&Hold) | 20.28% |
HODL戦略との比較
実装コード(Python)
#!/usr/bin/env python3
"""
ROC(Rate of Change)モメンタム戦略
価格変化率でモメンタムを測定
"""
import pandas as pd
import numpy as np
def calculate_roc_signals(df: pd.DataFrame, roc_period: int = 12,
threshold: float = 0.0) -> pd.DataFrame:
"""
ROCモメンタムシグナルを生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
roc_period : int
ROC計算期間(デフォルト: 12)
threshold : float
シグナル閾値(デフォルト: 0.0)
Returns:
--------
pd.DataFrame
シグナル列が追加されたDataFrame
"""
df = df.copy()
# ROC計算(価格変化率)
df['roc'] = ((df['close'] - df['close'].shift(roc_period)) / df['close'].shift(roc_period)) * 100
# ROCの移動平均(スムージング)
df['roc_ma'] = df['roc'].rolling(window=3).mean()
# ROCの標準偏差(ボラティリティ)
df['roc_std'] = df['roc'].rolling(window=roc_period).std()
# 動的閾値(ボラティリティ調整)
df['upper_threshold'] = threshold + df['roc_std']
df['lower_threshold'] = threshold - df['roc_std']
# シグナル生成
df['is_buy'] = (
(df['roc_ma'] > df['upper_threshold']) &
(df['roc_ma'].shift(1) <= df['upper_threshold'].shift(1))
)
df['is_sell'] = (
(df['roc_ma'] < df['lower_threshold']) &
(df['roc_ma'].shift(1) >= df['lower_threshold'].shift(1))
)
# NaN値をFalseに置換
df['is_buy'] = df['is_buy'].fillna(False)
df['is_sell'] = df['is_sell'].fillna(False)
print(f"ROCモメンタム: 期間={roc_period}, 基準閾値={threshold}")
print(f"買いシグナル数: {df['is_buy'].sum()}")
print(f"売りシグナル数: {df['is_sell'].sum()}")
return df
なぜこの結果になったのか(3つの理由)
- 1今回のテストでは、勝てたのは10回中3回くらいで、全体としては残念ながらマイナスになってしまいました。これは、ビットコインの値段の「勢い」が、いつも思った通りには続かなかった、ということです。
- 21回の売り買いで、平均してどれくらい儲かるかという目安の数字もマイナスでした。これは、売り買いを繰り返すほど、少しずつお金が減っていってしまったことを表しています。
- 3一番うまくいかなかった時には、持っていたお金が一時的に2割くらい減ってしまったことがありました。これは、一度の失敗で大きく損してしまう可能性があった、ということです。
この結果から学べる3つの教訓
- 1値段の「勢い」だけを頼りにするのは、いつでもうまくいくわけではない、ということが分かりました。市場の動きは、もっと複雑なようです。
- 2勝つ回数が少なくても、1回勝った時にすごく大きく儲けることができれば、全体でプラスになることもあります。でも、今回はそうはなりませんでした。
- 3どんなに良さそうに見える作戦でも、実際に試してみると、思ったような結果にならないことがある、と学びました。だから、しっかりテストすることが大切なんですね。
リスク管理の具体的手法
取引量の決め方
売り買いをするときは、もし失敗しても「これくらいなら大丈夫」と思える金額の範囲でやるのが大切です。例えば、「持っているお金の100分の1だけ使ってみよう」というように、自分でルールを決めておくと安心です。
損失が大きくなったときの対処法
もし思った方向と逆に値段が動いて損が出始めたら、それ以上損が広がらないように、すぐに取引をやめること(損切り)がとても重要です。この作戦でも、上手に損切りする仕組みを考える必要があります。
資金管理の方法
持っているお金全体のうち、1回の売り買いにどれくらいまで使うかを決めておくことです。例えば、「どんなときでも、持っているお金の10分の1以上は使わない」というルールを守れば、一度の失敗で全部のお金をなくしてしまうのを防げます。
改良案の具体的提案
- 「ここからが買い時!」と判断するラインを、もっと工夫して、より良いタイミングが見つかるように調整してみます。
- 「勢い」をはかる道具だけでなく、他の道具(例えば、値段の平均的な動きを示す線など)も一緒に使って、もっと確かな「合図」を見つけられるようにします。
- 「これ以上損したらやめる」というルールを、もっと早めに、そして厳しく設定して、一度の失敗で失うお金を減らすようにします。
実用性の向上(運用上の注意)
- もしこの作戦を実際に使ってみたくなったら、まずはとても少ない金額で試して、本当に思った通りに動くかを確認してみましょう。
- ビットコインの値段は、急に大きく動くことがあります。だから、いつも最新のニュースをチェックして、無理のない範囲で楽しむことが大切です。
- このテスト結果は、あくまで昔のデータで試したものです。未来も同じようにうまくいくという保証はありません。色々なやり方を勉強して、自分に合った方法を見つけるのが一番です。
検証の透明性と信頼性
- データの出所: このテストに使ったのは、過去のビットコインの1時間ごとの値段のデータです。
- 検証のやり方: コンピューターのプログラムを使って、過去のある期間(このテストでは約4ヶ月間)のデータで、この作戦がどれくらい儲かったか、または損をしたかを計算しました。
- コード: このテストに使ったプログラムの設計図は、誰でも見られるように公開されています。
- 注意事項: これは昔のデータを使ったテストの結果であって、将来も必ず儲かることを約束するものではありません。お金をどう使うかは、自分でよく考えて決めてくださいね。特に、ビットコインのようなデジタルなお金は、値段の動きがとても激しいので、注意が必要です。