シェア:

ビットコインの投資に挑戦!中学生にもわかる「コナーズRSI」っていう作戦

この作戦は、ビットコインというデジタル通貨の1時間ごとの値段の動きを見て、「コナーズRSI」っていう特別な道具を使う方法です。これで、いつ買って、いつ売ればいいのかのヒントを見つけます。昔のデータで試したらどんな結果になったか、一緒に見てみましょう!

取引数
269
勝率
49.81%
最終リターン
-54.80%
最大DD
55.76%

導入と前提条件

この作戦は、ビットコインというデジタル通貨の1時間ごとの値段の動きを見て、「コナーズRSI」っていう特別な道具を使う方法です。これで、いつ買って、いつ売ればいいのかのヒントを見つけます。昔のデータで試したらどんな結果になったか、一緒に見てみましょう!

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

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

Connors RSI の理論的背景

この作戦の基本的な考え方は、「ビットコインの値段は、時々、上がりすぎたり、下がりすぎたりすることがある」というものです。例えば、値段が急に上がりすぎると、「そろそろ下がるかも」と考える人が増えます。逆に、急に下がりすぎると、「今が買うチャンスかも」と考える人が増えるんです。コナーズRSIは、この「行き過ぎ」の度合いを数字で見せてくれて、いつ買ったり売ったりすればいいかのサインを見つける手助けをしてくれます。具体的には、①最近の値段の勢い、②値段が上がり続けたか、下がり続けたかの回数、③値段の変化の大きさがどれくらいか、という3つのポイントを計算して、一つの数字を出します。この数字がとっても低くなったら(例えば20より下)、「安すぎるから買い!」というサイン。逆にとっても高くなったら(例えば80より上)、「高すぎるから売り!」というサインになります。

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

エントリー条件

  • コナーズRSIの数字が20より下になったら「買い」のサインです。(値段が安すぎると考えます)
  • (※この作戦では、これが主な買いのルールです)

エグジット条件

  • コナーズRSIの数字が80より上になったら「売り」のサインです。(値段が高すぎると考えます)
  • (※この作戦では、これが主な売りのルールです)

リスク管理

取引をするときは、一度に全部のお金を使わないことが大事です。もし負けても大丈夫なくらいの少しの金額で始めましょう。もし予想と反対に値段が動いて損が出始めたら、「これ以上損したらやめる」と決めておいたところでストップする(これを「損切り」と言います)ことも、とても大切です。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数269回
勝率49.81%
平均利益0.6%
平均損失-1.17%
期待値-0.29%
プロフィットファクター0.52
最大ドローダウン55.76%
最終リターン-54.8%
シャープレシオ-0.42
HODL(Buy&Hold)69.13%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Connors RSI Signal
CRSIの閾値で逆張りするのだ。
"""
import pandas as pd
import numpy as np


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


def _streak(s: pd.Series) -> pd.Series:
    streak = [0]
    for i in range(1, len(s)):
        if s.iloc[i] > s.iloc[i-1]:
            streak.append(max(1, streak[-1] + 1))
        elif s.iloc[i] < s.iloc[i-1]:
            streak.append(min(-1, streak[-1] - 1))
        else:
            streak.append(0)
    return pd.Series(streak, index=s.index)


def _percent_rank(s: pd.Series, n: int) -> pd.Series:
    return s.rolling(n).apply(lambda x: pd.Series(x).rank(pct=True).iloc[-1] * 100, raw=False)


def calculate_connors_rsi_signals(df: pd.DataFrame, rsi_len: int = 3, streak_rsi_len: int = 2, pr_len: int = 100, buy_level: float = 20, sell_level: float = 80) -> pd.DataFrame:
    out = df.copy()
    rsi1 = _rsi(out['close'], rsi_len)
    streak = _streak(out['close'])
    rsi2 = _rsi(streak.abs(), streak_rsi_len)
    roc = out['close'].pct_change()
    pr = _percent_rank(roc, pr_len)
    crsi = (rsi1 + rsi2 + pr) / 3
    out['crsi'] = crsi
    out['is_buy'] = crsi < buy_level
    out['is_sell'] = crsi > sell_level
    return out

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

  1. 1この作戦を過去のデータで試した結果です。取引は269回もあって、たくさんチャンスはありましたが、勝てたのは約半分(勝率49.8%)でした。
  2. 2残念ながら、1回の取引で期待できる利益はマイナスで、トータルで見ると損をしてしまう計算になりました。
  3. 3最終的には、もとのお金が半分くらいに減ってしまう結果(-54.8%)になりました。一番うまくいかなかった時期には、お金が半分以上も減ってしまう(最大DD 55.76%)こともありました。これは、この作戦は今のままでは利益を出すのが難しい、ということを教えてくれています。

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

  1. 1「安く買って高く売る」というシンプルな考え方でも、必ずうまくいくわけではない、ということがわかりました。
  2. 2値段が「行き過ぎた」ときをねらう作戦でも、失敗することがあるんだ、と学ぶことができます。
  3. 3昔のデータでうまくいかなくても、がっかりするだけじゃなくて、「なんでだろう?」と原因を考えることが、次にもっと良い作戦を立てるための大切なヒントになります。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金は、自分が持っているお金全部の、ほんの少し(例えば100分の1とか)だけにします。こうすれば、もし負けてしまっても、すぐにお金が全部なくなってしまうのを防げます。

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

もし損がどんどん大きくなってきたら、もっとひどくなる前に取引をやめる勇気も大切です。これを「損切り(そんぎり)」と言います。

資金管理の方法

「全体でこれ以上は損しない」という金額を決めておいて、それを超えないように気をつけます。もし利益が出たら、その一部を次の取引に使うなど、上手にお金を管理していくことも考えましょう。

改良案の具体的提案

  • 「買い」や「売り」のサインが出たときに、そのサインが本当に合っているか、別の道具(例えば、値段がどっちの方向に動いているかを示すもの)も使ってもう一回チェックするルールを追加してみましょう。
  • みんなと逆の動きをする「逆張り」だけじゃなくて、値段が上がっている勢いに乗って買う「順張り」という作戦も組み合わせてみるのもいいかもしれません。
  • 1時間ごとの値段の動きを見るだけじゃなく、1日ごとや15分ごとなど、見る時間を変えてみたり、コナーズRSIを計算するときの設定をいろいろ変えてみたりして、もっと良い条件を探してみましょう。

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

  • この作戦は、昔のデータではあまり良い結果が出なかったので、このまま使うのは危ないかもしれません。まずはとても少ないお金で試したり、もっと良くなるように工夫してから使ったりするのがおすすめです。
  • 「何回勝てたか(勝率)」だけじゃなく、「トータルで見て利益が出そうか」ということも、しっかり確認することが大切です。
  • ビットコインのようなデジタル通貨は、値段の動きがとても激しいことがあるので、いつもニュースなどを見て、今どんな状況なのかを気にしておくことが大切です。

検証の透明性と信頼性

  • データの出所: この説明は、提供された過去のデータを使ったテスト結果をもとにしています。
  • 検証のやり方: 提供されたデータと、計算用のプログラム(Pythonコード)を使って確かめました。
  • コード: 計算に使ったプログラムは、見ることができるようになっています。
  • 注意事項: この記事は、投資をすすめるものではありません。昔うまくいったからといって、未来もうまくいくとは限りません。投資には損をする可能性(リスク)があります。自分でよく考えて、自分の責任で挑戦してくださいね。

よくある質問

Q.コナーズRSIって、どうやって計算するの?

A.値段の「勢い」や「動きの大きさ」など、3つの情報を合体させて計算します。少し難しい計算ですが、「最近の値段は元気かな?」とか「上がり続けてるかな?」っていうのを見ている、とイメージすると分かりやすいですよ。

Q.「逆張り(ぎゃくばり)」ってどういう意味?

A.みんなが「これから上がるぞ!」と思って買っているときに売ったり、逆に「もうダメだ!」と思って売っているときに買ったりすることです。みんなとは逆の行動をとって、行き過ぎた値段が元に戻るのをねらう作戦です。

Q.勝率が49.8%って、負ける方が多いの?

A.だいたい半分くらい勝てる、ということですね。でも投資で大事なのは、勝ったときにどれくらい利益が出て、負けたときにどれくらい損をするか、そのバランスです。この作戦では、残念ながら負けたときの損の方が大きかったので、トータルでマイナスになってしまいました。

Q.最大DDって何?

A.「最大ドローダウン」のことで、投資を続けている中で、お金が一番大きく減ってしまったときの割合のことです。この作戦では、一時的にお金が半分以上(55.76%)も減ってしまった時期があった、という意味です。

Q.この作戦で本当に勝てるようになる?

A.この作戦をそのまま使っても勝つのは難しいかもしれません。でも、今回わかった「こうすればもっと良くなるかも?」というヒントを元に作戦を改造したり、他の作戦と組み合わせたりすれば、勝てる可能性は上がっていきます。失敗から学んで次に活かすことが一番大切です!

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報