シェア:

ビットコインで「ストキャスティクスRSI」っていう作戦を試したらどうなった?5分間の値動きで調べてみたよ!

人気がある暗号資産(仮想通貨)のビットコインで、「ストキャ-ス-ティクスRSI」という作戦を試してみました。これは、値段が上がる勢いがあるか、下がる勢いがあるかを見て、「いつ買うか」「いつ売るか」を決めるやり方です。今回は、5分ごとの値動きのグラフを使って試した結果を、わかりやすく説明しますね。

取引数
2348
勝率
17.04%
最終リターン
-99.99%
最大DD
99.99%

導入と前提条件

人気がある暗号資産(仮想通貨)のビットコインで、「ストキャ-ス-ティクスRSI」という作戦を試してみました。これは、値段が上がる勢いがあるか、下がる勢いがあるかを見て、「いつ買うか」「いつ売るか」を決めるやり方です。今回は、5分ごとの値動きのグラフを使って試した結果を、わかりやすく説明しますね。

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

  • 戦略名: Stochastic RSI を使用したトレンド追従戦略
  • 対象銘柄: BTC/USDT
  • 時間足: 5m
  • 期間: 2024-09-25〜2025-08-25(333日間)
  • 初期資金: $10,000
  • 手数料・スリッページ: 0.1% / 0.1%
  • 取引所: binance

Stochastic RSI の理論的背景

「ストキャスティクスRSI」は、みんなが「もう売られすぎだよ」と感じている時に値段が上がる勢いが出てきたり、逆に「買われすぎだよ」と感じている時に下がる勢いが出てきたりするのを捉えようとするものです。例えば、「売られすぎ」のゾーンで2本の線のうち1本がもう1本を追い抜く「ゴールデンクロス」が起きると、「これから値段が上がるかも?」というサインだと考えます。逆に、「買われすぎ」のゾーンで逆の「デッドクロス」が起きると、「これから値段が下がるかも?」と考えます。こうしたサインを見て、取引を始めたり終えたりするタイミングを決めます。

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

エントリー条件

  • 「売られすぎ」を示す『20』より低い場所で、2本の線が良い形(ゴールデンクロス)で交わったら、買うチャンスと考えます。
  • 「買われすぎ」を示す『80』より高い場所で、2本の線が注意の形(デッドクロス)で交わったら、売るチャンスと考えます。

エグジット条件

  • 買った後、注意の形(デッドクロス)で線が交わったり、「買われすぎ」の『80』のラインを越えたりしたら、取引を終えます。
  • 売った後、良い形(ゴールデンクロス)で線が交わったり、「売られすぎ」の『20』のラインを下回ったりしたら、取引を終えます。

リスク管理

大きな損をしないためのルールも決めておきます。もし予想と違う動きをしたら、早めに取引を終えます。また、一度に使うお金の量を少なくして、万が一の損を小さくするようにします。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数2348回
勝率17.04%
平均利益0.39%
平均損失-0.54%
期待値-0.38%
プロフィットファクター0.16
最大ドローダウン99.99%
最終リターン-99.99%
シャープレシオ-1.34
HODL(Buy&Hold)75.8%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Stochastic RSI Signal
StochRSIのK/Dクロスで判定するのだ。
"""
import pandas as pd


def _rsi(close: pd.Series, period: int = 14) -> pd.Series:
    delta = close.diff()
    gain = delta.where(delta > 0, 0.0)
    loss = -delta.where(delta < 0, 0.0)
    avg_gain = gain.rolling(period).mean()
    avg_loss = loss.rolling(period).mean()
    rs = avg_gain / avg_loss
    return 100 - (100 / (1 + rs))


def calculate_stoch_rsi_signals(df: pd.DataFrame, rsi_period: int = 14, k_period: int = 3, d_period: int = 3, lower: float = 20, upper: float = 80) -> pd.DataFrame:
    out = df.copy()
    rsi = _rsi(out['close'], rsi_period)
    rsi_min = rsi.rolling(rsi_period).min()
    rsi_max = rsi.rolling(rsi_period).max()
    stoch = 100 * (rsi - rsi_min) / (rsi_max - rsi_min)
    k = stoch.rolling(k_period).mean()
    d = k.rolling(d_period).mean()
    out['k'] = k
    out['d'] = d
    prev = (k - d).shift(1)
    now = k - d
    out['is_buy'] = (now > 0) & (prev <= 0) & (k < lower)
    out['is_sell'] = (now < 0) & (prev >= 0) & (k > upper)
    return out

なぜこの結果になったのか(3つの理由)

  1. 1勝てたのが100回のうち17回くらい(勝率17.04%)と少なかったのは、売り買いのサインが出た後も、思った通りに値段が動かないことが多かったからだと考えられます。
  2. 21回の取引でプラスになるかマイナスになるかの期待値がマイナスだったのは、勝った時にもらえるお金が少なく、負けた時に失うお金が大きかったからです。
  3. 3最終的にもとのお金がほとんどなくなってしまった(最終損益-99.99%)のは、この作戦を続けると、だんだん損が積み重なっていったからです。一番お金が減った時(最大DD)には、もとのお金がほぼゼロになっていたことからも、とても厳しい結果だったことがわかります。

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

  1. 1「ストキャスティクスRSI」の線のクロスだけを頼りにして、ずっと勝ち続けるのは難しい場合がある、ということがわかりました。
  2. 2何回勝てたか、という勝率だけではなくて、1回の勝ち負けでどれくらいお金が増えたり減ったりするのか、というバランスも作戦の良し悪しを決めるのにすごく大事だということがわかりました。
  3. 3ただビットコインをずっと持っているだけの作戦(ガチホ)と比べて結果が悪かったということは、この作戦が値動きの波にうまく乗れていなかったのかもしれません。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金の量は、持っているお金全体のほんの数パーセントだけ、と決めておきます。こうすれば、もし負けても、全体へのダメージを小さくできます。

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

もし損が続いて、持っているお金が例えば10%減ってしまったら、いったん取引をお休みする、というルールを作ります。こうすることで、もっと大きな損をするのを防ぎます。

資金管理の方法

最初から「このお金の範囲で取引しよう」と決めておきます。「負けたから取り返そう!」と焦って無茶な取引をしないための、大切なルールです。

改良案の具体的提案

  • 「移動平均線」のような他の道具も一緒に使うと、「今がチャンス!」というサインの正確さがアップするかもしれません。
  • 目安にする数字(20とか80)を、状況に合わせて変えてみると、もっと良い結果になる可能性があります。
  • 「このくらい利益が出たらやめる(利確)」「これ以上損したらやめる(損切り)」というルールを、もっと細かく決めると、損を小さくして利益を大きくできるかもしれません。

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

  • 今回は5分ごとという短い時間での値動きを見ましたが、もっと長い時間(1時間ごとや1日ごと)の値動きで試してみると、良い結果が出るかもしれません。
  • この結果は、あくまでも過去のデータで試したものです。未来も同じようにうまくいくとは限りません。実際に試すときは、なくなっても大丈夫な少しのお金から始めるなど、注意して行いましょう。
  • 作戦で使う設定の数字は、その時々で一番良いものが変わります。色々な数字で試してみて、自分に合った設定を見つけることが大切です。

検証の透明性と信頼性

  • データの出所: この調査では、提供されたデータを使いました。
  • 検証のやり方: 過去のビットコインの5分ごとの値動きのデータを使って、この作戦がうまくいったかどうかを試しました(バックテストと言います)。
  • コード: この作戦をコンピューターで動かすためのプログラムは、元の記事に載っています。
  • 注意事項: このお話は、過去のデータで調べた結果であり、将来の利益を約束するものではありません。投資は、ご自身の判断と責任で行ってください。特に、暗号資産(仮想通貨)は、値段がすごく大きく上がったり下がったりする、注意が必要なものです。

よくある質問

Q.「ストキャスティクスRSI」って、結局なに?

A.「今、買われすぎかな?売られすぎかな?」というのを教えてくれる『RSI』という道具があります。そのRSIの『勢い』を、もっと詳しく見るための道具が『ストキャスティクスRSI』です。

Q.K線とD線がクロスするってどういうこと?

A.これは、ストキャスティクスRSIの中にある2本の線のことです。動きの速いK線が、動きのゆっくりなD線を下から上に追い抜いたら『買いのチャンスかも?』というサイン。逆に上から下に追い抜いたら『売りのチャンスかも?』というサイン、と考えることが多いです。

Q.目安にする数字(20とか80)ってなんのためにあるの?

A.『20』よりも下に線があるときは『売られすぎ』、『80』よりも上に線があるときは『買われすぎ』という目安になります。こういう特別な場所で線のクロスが起きたら、それはもっと大事なサインかもしれない、と考えるために使います。

Q.勝率が低いって、全然勝てなかったの?

A.100回取引したら17回くらいしか勝てなかった、ということです。しかも、勝ったときにもらえるお金より、負けたときに失うお金の方が大きいと、全体でみるとマイナスになってしまうんです。

Q.この作戦は、もう使えないの?

A.今回のやり方ではうまくいきませんでしたが、他の道具と組み合わせたり、設定する数字を変えたりすれば、もっと良い結果になる可能性はあります。でも、投資をするときは、自分でよく考えて、なくなっても困らないお金の範囲でやることがとても大切です。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報