市場の元気さに合わせて賢く動く!新しいRSI作戦
この作戦は、人気の仮想通貨「イーサリアム」を使って、5分ごとにお金の動きを見ながら、売り買いのタイミングを探す方法です。「アダプティブRSI」という特別な道具を使います。この道具は、市場が盛り上がっているか、静かかを見きわめて、売り買いのルールを自動で変えてくれる賢い仕組みなんです。
導入と前提条件
この作戦は、人気の仮想通貨「イーサリアム」を使って、5分ごとにお金の動きを見ながら、売り買いのタイミングを探す方法です。「アダプティブRSI」という特別な道具を使います。この道具は、市場が盛り上がっているか、静かかを見きわめて、売り買いのルールを自動で変えてくれる賢い仕組みなんです。
【検証】戦略のバックテスト概要
- 戦略名: Adaptive RSI を使用したトレンド追従戦略
- 対象銘柄: ETH/USDT
- 時間足: 5m
- 期間: 2024-10-04〜2025-08-25(324日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
Adaptive RSI の理論的背景
ふつうの「RSI」は、最近の値段の上がり下がりを見て、「買われすぎ」か「売られすぎ」かを教えてくれる道具です。いつもは決まった期間のデータで計算します。でも、この作戦で使う「アダプティブRSI」はもっと賢いんです。「ATR」という別の道具で今の市場の元気さ(値動きの大きさ)を測って、元気なときは短い期間で、おとなしいときは長い期間でRSIを計算するように自動で変えてくれます。だから、市場の変化にすぐ気づけるようになっているんです。
具体的な売買ルール(今回の検証)
エントリー条件
- RSIが「売られすぎだよ」というサインを出したら、買うチャンスかもしれません。
- RSIが「買われすぎだよ」というサインを出したら、売るチャンスかもしれません。
エグジット条件
- 買った後、RSIが「買われすぎだよ」というサインに変わったら、利益を出すために売ります。
- 売った後、RSIが「売られすぎだよ」というサインに変わったら、利益を出すために買い戻します。
リスク管理
もし作戦がうまくいかなくても、大きな損をしないためのルールも大事です。1回の取引で損してもいい金額をあらかじめ決めておきます。もし全体の損が大きくなってきたら、いったんお休みして、作戦を見直すことも大切です。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでETH/USDTのOHLCVを取得して前処理
- 『Adaptive RSI』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 1093回 |
勝率 | 39.52% |
平均利益 | 0.66% |
平均損失 | -1.03% |
期待値 | -0.36% |
プロフィットファクター | 0.45 |
最大ドローダウン | 98.43% |
最終リターン | -98.32% |
シャープレシオ | -0.41 |
HODL(Buy&Hold) | 96.48% |
HODL戦略との比較
実装コード(Python)
"""
Adaptive RSI Trading Signal Generator
RSI期間を市場ボラティリティに応じて動的に調整する戦略
"""
import pandas as pd
import numpy as np
def calculate_adaptive_rsi_signals(df: pd.DataFrame,
base_period: int = 14,
atr_period: int = 14,
oversold: float = 30,
overbought: float = 70) -> pd.DataFrame:
"""
アダプティブRSI戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
base_period : int
基本RSI期間(デフォルト: 14)
atr_period : int
ATR計算期間(デフォルト: 14)
oversold : float
売られ過ぎライン(デフォルト: 30)
overbought : float
買われ過ぎライン(デフォルト: 70)
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# ATR計算
df['h_l'] = df['high'] - df['low']
df['h_c'] = np.abs(df['high'] - df['close'].shift(1))
df['l_c'] = np.abs(df['low'] - df['close'].shift(1))
df['true_range'] = df[['h_l', 'h_c', 'l_c']].max(axis=1)
df['atr'] = df['true_range'].rolling(window=atr_period).mean()
# ATRに基づいて期間を調整(ボラティリティが高いほど短期間)
df['atr_ratio'] = df['atr'] / df['atr'].rolling(window=50).mean()
df['adaptive_period'] = (base_period / df['atr_ratio']).clip(5, 30).fillna(base_period).astype(int)
# アダプティブRSI計算
df['price_change'] = df['close'].diff()
df['gain'] = df['price_change'].where(df['price_change'] > 0, 0)
df['loss'] = -df['price_change'].where(df['price_change'] < 0, 0)
# 各行で異なる期間でRSIを計算
df['rsi'] = 0.0
for i in range(len(df)):
if i >= base_period:
period = int(df.iloc[i]['adaptive_period'])
if period > 0 and i >= period:
avg_gain = df['gain'].iloc[i-period+1:i+1].mean()
avg_loss = df['loss'].iloc[i-period+1:i+1].mean()
if avg_loss != 0:
rs = avg_gain / avg_loss
df.loc[df.index[i], 'rsi'] = 100 - (100 / (1 + rs))
# シグナル生成
df['rsi_prev'] = df['rsi'].shift(1)
df['is_buy'] = (df['rsi'] > oversold) & (df['rsi_prev'] <= oversold) & (df['rsi'] > 0)
df['is_sell'] = (df['rsi'] < overbought) & (df['rsi_prev'] >= overbought) & (df['rsi'] > 0)
# 不要カラム削除
df.drop(['h_l', 'h_c', 'l_c', 'true_range', 'price_change', 'gain', 'loss',
'atr_ratio', 'adaptive_period', 'rsi_prev'], axis=1, inplace=True, errors='ignore')
return df
なぜこの結果になったのか(3つの理由)
- 1この作戦は、市場の急な変化にもついていけるはず、と考えていました。
- 2でも、実際にやってみた結果(1093回取引しました)を見てみると、勝てたのは10回のうち4回くらいで、最終的には残念ながら損をしてしまいました。
- 3特に、持っているお金が一番減ってしまった時の減り方がとても大きくて、この作戦はこの時の市場には合っていなかったみたいです。
この結果から学べる3つの教訓
- 1どんなに賢そうに見える作戦でも、いつでもうまくいくわけじゃないってことがわかりました。
- 2「買われすぎ」や「売られすぎ」のサインだけじゃなくて、市場全体がどれくらい元気に動いているかにも注意することが大事だと学びました。
- 3昔のデータでうまくいったからといって、これからも同じようにうまくいくとは限らない、ということを知りました。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金は、持っているお金全体の1%や2%のように、ごく一部に決めておきます。こうすれば、もし負けてもダメージは小さくてすみます。
損失が大きくなったときの対処法
もし、持っているお金全体が10%や20%のように大きく減ってしまったら、一度取引をお休みします。そして、作戦が今の市場に合っているか、じっくり考え直します。
資金管理の方法
取引で勝って増えたお金は、全部次の取引に使わずに、一部は貯金しておきます。そうすれば、もしもの時に助かりますし、落ち着いて次のチャンスをねらえます。
改良案の具体的提案
- RSIのサインが出たときに、他の道具(例えば、値段の平均を表す線など)も見て、「本当に今がチャンスかな?」ともう一度確認するようにします。
- 市場の動きが激しいときは少しだけ取引して、おとなしいときはもう少し多めに取引するなど、取引する量を調整してみます。
- この作戦が、どんなとき(値段が上がっているとき、下がっているときなど)に特にうまくいかないのかを調べて、ルールを変えたり新しいルールを追加したりします。
実用性の向上(運用上の注意)
- この作戦は5分ごとの短い時間で判断するので、画面をよく見て、すばやく行動する必要があります。
- 実際に自分のお金で試す前に、昔のデータを使って「もしこの作戦を使っていたらどうなっていたかな?」と練習(バックテスト)してみることがすごく大切です。
- 市場は生き物みたいにいつも変わるので、一度決めたルールがずっと正しいわけではありません。時々、作戦を見直すことも忘れないでください。
検証の透明性と信頼性
- データの出所: この結果は、「イーサリアム(ETH/USDT)」という仮想通貨の5分ごとの値動きのデータ(2024年10月4日から2025年8月25日まで)を元にしています。
- 検証のやり方: パソコンのプログラムを使って、昔のデータでこの作戦を試したらどうなったか(バックテスト)を調べました。RSIの計算の基本になる数字は14、売られすぎのラインは30、買われすぎのラインは70に設定しました。
- コード: このテストに使ったプログラムの詳しい内容は、見られるようになっています。
- 注意事項: この結果は、あくまで昔のデータで試したものです。未来も同じようにうまくいくとは限りません。お金を実際に使うときは、自分でよく考えて、自分の責任で行ってくださいね。