ビットコインの投資に挑戦!中学生にもわかる「コナーズRSI」っていう作戦
この作戦は、ビットコインというデジタル通貨の1時間ごとの値段の動きを見て、「コナーズRSI」っていう特別な道具を使う方法です。これで、いつ買って、いつ売ればいいのかのヒントを見つけます。昔のデータで試したらどんな結果になったか、一緒に見てみましょう!
導入と前提条件
この作戦は、ビットコインというデジタル通貨の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)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Connors RSI』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 269回 |
勝率 | 49.81% |
平均利益 | 0.6% |
平均損失 | -1.17% |
期待値 | -0.29% |
プロフィットファクター | 0.52 |
最大ドローダウン | 55.76% |
最終リターン | -54.8% |
シャープレシオ | -0.42 |
HODL(Buy&Hold) | 69.13% |
HODL戦略との比較
実装コード(Python)
"""
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この作戦を過去のデータで試した結果です。取引は269回もあって、たくさんチャンスはありましたが、勝てたのは約半分(勝率49.8%)でした。
- 2残念ながら、1回の取引で期待できる利益はマイナスで、トータルで見ると損をしてしまう計算になりました。
- 3最終的には、もとのお金が半分くらいに減ってしまう結果(-54.8%)になりました。一番うまくいかなかった時期には、お金が半分以上も減ってしまう(最大DD 55.76%)こともありました。これは、この作戦は今のままでは利益を出すのが難しい、ということを教えてくれています。
この結果から学べる3つの教訓
- 1「安く買って高く売る」というシンプルな考え方でも、必ずうまくいくわけではない、ということがわかりました。
- 2値段が「行き過ぎた」ときをねらう作戦でも、失敗することがあるんだ、と学ぶことができます。
- 3昔のデータでうまくいかなくても、がっかりするだけじゃなくて、「なんでだろう?」と原因を考えることが、次にもっと良い作戦を立てるための大切なヒントになります。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金は、自分が持っているお金全部の、ほんの少し(例えば100分の1とか)だけにします。こうすれば、もし負けてしまっても、すぐにお金が全部なくなってしまうのを防げます。
損失が大きくなったときの対処法
もし損がどんどん大きくなってきたら、もっとひどくなる前に取引をやめる勇気も大切です。これを「損切り(そんぎり)」と言います。
資金管理の方法
「全体でこれ以上は損しない」という金額を決めておいて、それを超えないように気をつけます。もし利益が出たら、その一部を次の取引に使うなど、上手にお金を管理していくことも考えましょう。
改良案の具体的提案
- 「買い」や「売り」のサインが出たときに、そのサインが本当に合っているか、別の道具(例えば、値段がどっちの方向に動いているかを示すもの)も使ってもう一回チェックするルールを追加してみましょう。
- みんなと逆の動きをする「逆張り」だけじゃなくて、値段が上がっている勢いに乗って買う「順張り」という作戦も組み合わせてみるのもいいかもしれません。
- 1時間ごとの値段の動きを見るだけじゃなく、1日ごとや15分ごとなど、見る時間を変えてみたり、コナーズRSIを計算するときの設定をいろいろ変えてみたりして、もっと良い条件を探してみましょう。
実用性の向上(運用上の注意)
- この作戦は、昔のデータではあまり良い結果が出なかったので、このまま使うのは危ないかもしれません。まずはとても少ないお金で試したり、もっと良くなるように工夫してから使ったりするのがおすすめです。
- 「何回勝てたか(勝率)」だけじゃなく、「トータルで見て利益が出そうか」ということも、しっかり確認することが大切です。
- ビットコインのようなデジタル通貨は、値段の動きがとても激しいことがあるので、いつもニュースなどを見て、今どんな状況なのかを気にしておくことが大切です。
検証の透明性と信頼性
- データの出所: この説明は、提供された過去のデータを使ったテスト結果をもとにしています。
- 検証のやり方: 提供されたデータと、計算用のプログラム(Pythonコード)を使って確かめました。
- コード: 計算に使ったプログラムは、見ることができるようになっています。
- 注意事項: この記事は、投資をすすめるものではありません。昔うまくいったからといって、未来もうまくいくとは限りません。投資には損をする可能性(リスク)があります。自分でよく考えて、自分の責任で挑戦してくださいね。