bookloveru2

2021年5月14日4 分

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年)など。
 
無料で、お試しもできますので安心です。
 
お時間ある方は下記リンクを覗いてみてはいかがでしょうか(*'ω'*)

    10600
    3