No.8のバックテスト・コードでは「RSIが一定値以下になったら買い」「RSIが一定値以上になったら売る」といういわゆる逆張り(リバーサル)ロジックを実装しています。具体的には、
- RSI期間: 10日
- 買い条件: RSI ≤ 20
- 売り条件: RSI ≥ 30
- 最大保有日数: 2000営業日(ほぼ制限なしに近い)
- 出来高フィルタ: 1日の出来高が
出来高=10000
株以上ある場合のみエントリー - エントリー/エグジット価格: いずれも当日の終値(Close)で建て・決済
- エグジットできなければ:(RSIが30を超えるタイミングがなければ)最終日の終値で強制決済
計算方法:コードを見ると、標準的なRSI計算(指数移動平均などを使用)とは異なり、直近 RSIの期間-1
日(=9日間)の終値の差から単純に値上がり幅合計と値下がり幅合計を計算し、その平均値を使ってRSIを算出しているようです。
株研オンライン:https://kabuken.online
株式投資バックテスト分析:https://kabutest.com
ロジックNo.8 RSIを使用した逆張り戦略 バックテスト結果
2019年のみ抽出(証券コード7049 識学)
https://fx.reform-network.net/wp-content/uploads/2025/04/test8_RSI_2025-04-01-09-29-55.csv
2011年から2024年までのバックテスト結果
https://fx.reform-network.net/wp-content/uploads/2025/04/test8_RSI_2025-04-01-10-08-05.csv
1. コードのロジック概要
- RSI の計算
- 日次データを1行ずつ読みながら、過去10日分の終値差分を集計し
- 上昇した日の値幅合計を
gain_sum
- 下落した日の値幅合計を
loss_sum
avg_gain = gain_sum / (期間-1)
,avg_loss = loss_sum / (期間-1)
RS = avg_gain / avg_loss
よりRSI = 100 - (100 / (1 + RS))
を計算
- 上昇した日の値幅合計を
- これを「エントリー候補日」「エグジット候補日」両方で毎日計算する。
- 日次データを1行ずつ読みながら、過去10日分の終値差分を集計し
- エントリー条件
RSI ≤ 20
になったタイミングでその日の終値で買い建てる。- ただし「出来高が0の日は除外」「
Volume > d(=10000)
の日のみ取引可」「株式分割などがあったかを簡易チェックしているが、分割後は取引しない設定のトレード集計パターンもある」等のフィルタがある。
- エグジット条件
- 買ったあと、翌日から毎日チェックし、
RSI ≥ 30
になったらその日の終値で売却する(決済)。 - もし RSI が30を上回るタイミングが来なければ、データ最終日(あるいは最大保有日数を超える日)の終値で強制決済。
- 買ったあと、翌日から毎日チェックし、
- 売買サイクル
- 1回のエントリーからエグジットが完了したら、次のトレード検出へ移る。
- エグジットした日以降は、再度 RSI ≤ 20 になるまでポジションを持たない。
2. 具体的な売買の動き(コード7049 識学)
ご提示いただいたバックテスト結果(証券コード7049)では、RSIが20以下になったタイミングで買い、30を超えたタイミングあるいは最終日付近で売る動作を繰り返しています。各トレードの例をいくつか解説すると:
- 2019/5/13 → 2019/5/15(+5.81%)
- 5/13時点でのRSIが20以下となり、終値(1836.666626)で買い。
- その後、RSIが30以上になったのが5/15だったため、5/15終値(1943.333374)で決済。
- 結果、約5.8%の利益。
- 2019/8/5 → 2019/8/7(+15.14%)
- 8/5にRSI <= 20 でエントリー(終値1427)。
- 8/7にRSIが30以上に達したため終値(1643)で決済。
- ごく短期間で約+15%となっている(急反発を捉えた典型例)。
- 2020/2/18 → 2020/3/12(-38.3%)
- 2/18にRSI <= 20で買い(終値1222)。
- コロナショック直前のタイミングで買ってしまい、RSIがなかなか30を超えず下落が続く。
- 結局3/12終値(754)でようやく決済(あるいは最終日付近or RSIがようやく30以上となった時点)。
- 大幅損失(-38.3%)になったケース。
- 2020/7/3 → 2020/7/6(+29.82%)
- 7/3にRSI <= 20で買い(終値1006)。
- 7/6に急騰し、RSIが30超えで終値(1306)決済。
- 短期で+29.82%という非常に大きな利益。
上記のように「RSIが小さいタイミング=短期間で売られすぎと判断して買い」「RSIがやや回復したところで決済」するため、下落局面で捕まってしまうと損失が大きくなる(2020年前半のような急落時の-38.3%など)。逆に急反発を捉えられれば短期で二桁%の利益が出る(2020/7月トレードなど)といった、典型的な逆張り結果が表れています。
3. まとめ
- 売買ロジック
- 売られすぎ判定 (RSI≤20) で「当日の終値」による買いエントリー
- 買われた戻し判定 (RSI≥30) で「当日の終値」による決済(最大保有日数 2000日)
- 出来高や株式分割チェックにより条件を満たす日だけトレードが成立する。
- 特徴
- RSIが低い局面で買い向かうため、下落底付近で反発を捉えられれば高いパフォーマンスを得やすい。
- 大暴落など「RSIが20以下のまま長期間停滞する」ケースだと大幅ドローダウンになる。
- 出来高フィルタ(d=10000)などにより、過疎的な出来高の日にはエントリーしない。
- 成績例 (7049 識学)
- 2019年当初〜2022年にかけて、10日RSI <= 20 で買って RSI >= 30 で売却を繰り返し、+15%を超えるトレードがある一方で、-38%など大きな損失になるケースもある“ハイリスク・ハイリターン”型の売買が確認できる。
このようにコードを見ると「典型的なRSI逆張り手法を、ほぼ保有期限の制限なしで回す」ことで、売られすぎゾーンからの反発を狙うトレードとなっています。急反発すると二桁%のリターンを短期で獲得できる一方、急落相場を掴むと強制ロスカットがない分大幅損失に繋がる──そうした取引が実際の結果に反映されているわけです。