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





閲覧数:552回0件のコメント