bookloveru2
pythonで株価分析⑬【コピペで3秒 RSI(相対力指数)でバックテスト】
更新日:2021年11月1日
今回は、大人気シリーズ「pythonで株価分析してみた」の第13弾です❕
表題の通り、
『コピペで3秒。』でRSI(相対力指数)のバックテストができます('ω')ノ
『有名な指標だけど、RSI(相対力指数)っていつ使えば儲かるの❓』という疑問に答えます。
ポチるだけで、バックテストの結果が表示されます!(^^)!
今回も、コピペで行ける様、しっかりとpythonコードの解説をしていきますので、グーグルコラボのご準備をお願い致します。
では、早速行ってみましょう!(^^)!
目次
❶ RSI(相対力指数)とは❓
❷ VISA【V:ビザカード】でバックテスト(*‘ω‘ *)
❸ pythonコード解説
❶ RSI(相対力指数)とは❓
RSI(相対力指数)とは、「Relative Strength Index」の略で、相場の相対的な強弱(又は過熱感)を表す指標です。
要は、「売られ過ぎ」。「買われ過ぎ」。を0~100%のパーセント表記で表します。
RSIが70%~80%を超えると買われ過ぎ、反対に20%~30%を割り込むと売られ過ぎと判断します。
上下の画像はマネックス証券様より。
とても分かり易い説明です(*^-^*)私も同証券を愛用しています💛
https://info.monex.co.jp/technical-analysis/indicators/005.html
❷ VISA【V:ビザカード】でバックテスト(*‘ω‘ *)
早速、pythonを使用して、RSI(相対力指数)を利用して売買したときのVISA【V】のトレード結果を見てみましょう(・ω・)ノ

トレード期間(バックテスト期間)は2019.5.14~2021.5.13(2年間)
1回のトレードにおける売買株数は100株です(*^-^*)
単位:ドル💲
'average return' '平均リターン' : 37.995,
'maximum drawdown' '最大ドローダウン' :4564.0,
'profit factor' '利益率' : 1.305,
'recovery factor' '回復率': 0.448,
'riskreward ratio' 'riskreward比率': 0.466, ※1
'sharpe ratio' 'シャープレシオ': 0.07, ※2
'stop loss' 'ストップロス': 0
'take profit': 0,
'total profit' '総利益': 2044.998,
'total trades' '総取引回数' : 19,
'win rate' '勝率': 73.684
という結果でした。一応利益は出ました。
総利益は2,044ドル。リスクリワード0.4%。
1回のトレードで獲得できる期待値37ドル。
まぁ、そこそこと言った感じでしょうか(・ω・)ノ
てゆーかRR比率と勝率から見るとトントン。損益分岐点くらいなので、微妙ですね(´;ω;`)ウゥゥ
総利益2,044ドルは、マグレと言えます。
ここで注目して頂きたいポイントは、RSI(相対力指数)の特徴として、「ボックス相場が続いているときの的中率は高いものの、上下に強いトレンドに弱い」ということです(画面赤枠)。コロナショック時の様に、上下に大きくブレると売買シグナルが出ていたとしても、トレンドの勢いが止まらずに、負けて終わることがあります。
ヨコヨコのボックス相場(画面青色枠)では、順調に利益を上げています(・ω・)ノ
一番下のグラフは、期待値の分布です。19回のトレード中14回は利益がでており(画面黄色枠)勝率73.68%。
しかし、この結果から、ふむふむ。(´・ω・`)
ボックス相場の際は、RSI(相対力指数)を見てポジション管理するのも良さそうだな。
と、感じました。
※1.リスクリワードレシオ(損益比率) = 勝ちトレードの平均利益 ÷ 負けトレードの平均損失
https://www.oanda.jp/lab-education/blog_column/risk_reward/
OANDAより
※2.シャープ・レシオ = ポートフォリオ収益率 ÷ ポートフォリオ収益率の標準偏差σ
❸ pythonコード解説
それでは、最後にPythonコード解説です。
ハイ。ドン!!
#@title バックテスト RSI
from stock_backtest import Backtest
from pprint import pprint
import datetime
number = "2019-5-14" #@param {type:"string"}
start = number
end = datetime.date.today()
ticker = "V" #@param [""] {allow-input: true}
class MyBacktest(Backtest):
def strategy(self):
rsi = self.rsi(period=10)
ema = self.ema(period=20)
atr = self.atr(period=20)
lower = ema - atr
upper = ema + atr
self.buy_entry = (rsi < 30) & (self.df.C < lower)
self.sell_entry = (rsi > 70) & (self.df.C > upper)
self.sell_exit = ema > self.df.C
self.buy_exit = ema < self.df.C
bt = MyBacktest(
ticker, # ticker
shares=100, # number of shares (default=1)
start=start, # start date (default="")
end=end, # end date (default="")
data_dir="data", # data directory (default=.)
)
pprint(bt.run())
コードはたったこれだけです(^_-)-☆
RSIの期間は(period=10:10日間です)
※一般的には14日間で使う方が多いです!
ema(移動平均)の期間は(period=20:20日間です)
atrの期間は(period=20:20日間です)
RSIが30%以下で買いエントリー(売られ過ぎ)。
RSIが70%以上で売りエントリー(買われ過ぎ)。
以上、コピペで3秒。バックテストでした(・ω・)ノ
では、ばいちゃ。
pythonでプログラミングがしたい!!
pythonを学びたい!という方には、
オンラインプログラミング教室『Aidemy アイデミー』がお勧めです。
ご自身でプログラム環境を用意する必要は無く、サイトへアクセスするだけです。 創業者は東京大学工学部卒の石川聡彦さん。
著書に『人工知能プログラミングのための数学がわかる本』(KADOKAWA/2018年)など。
無料で、お試しもできますので安心です。
お時間ある方は下記リンクを覗いてみてはいかがでしょうか(*'ω'*)。