Tuesday, March 29, 2011

Rstudioで【9501】東京電力をバックテスト

Step 0: RStudioのインストール

 RStudioってのは、統計分析・グラフ作成プログラミング言語であるRのIDEみたいなもん。β版らしいが完成度は高い。オープンソースであり、プラットホームを選ばないことから、Emacs+ESSが敷居が高かった私のような層に普及していきそうな予感。RjpWikiの「エディタでR」のページに項目として挙げられたので、今後、日本語情報も要フォローである。下記のサイトからダウンロードできる。
 早速、使用感を試そうと思っていたところ、「トレーディング戦略をRでバックテストする方法」という記事を見つけ、東京電力(9501)で相対力指数(Relative Strength Index)が0.5以上なら買い、未満なら売りという単純な戦略を用いたときの評価をしてみる。

Step 1: データの入手

 株価データは、Yahoo!ファイナンスから入手。そのためのパッケージが、RFinanceYJ。先日、RFinanceYJ_0.1.6にバージョンアップして、xts形式に対応したので、ローソク足を描くquantmodパッケージにデータを渡すのが容易になった。
install.packages("RFinanceYJ")
install.packages("quantmod")
library(RFinanceYJ)
library(quantmod) # TTR, xts, zooもロードされる。
TODEN <- quoteStockXtsData('9501.t', '2011-01-01')
candleChart(TODEN)


Step 2: 指標の作成

 quantmodパッケージといっしょに読み込まれたTTRパッケージは様々な指標を算出してくれるものです。ここではRSIという指標を使います。
rsi <- RSI(TODEN[, 4]) #データの4列目の終値を用います。
Step 3: 戦略の策定

 ここでは、RSI0.5以上で買い、未満で売りという簡単な戦略をとることにします。テストを行う時点で存在しないデータを利用することで生じるバイアス(look-ahead bias)を回避するため、ラグをとることに注意してください。
signal <- Lag(ifelse(rsi >= 0.5, 1, -1))
Step 4: 戦略によるリターンの計算

 手数料などのコストはネグっています。
return <- ROC(TODEN[, 4])*signal
return <- return['2011-01-04/2011-03-28']
Step 5: 戦略のパフォーマンスを評価

 Rには、戦略評価のためのPerformanceAnalyticsパッケージまでが揃っています。
install.packages("PerformanceAnalytics")
require(PerformanceAnalytics)
table.Drawdowns(return, top=5)
table.DownsideRisk(return)
charts.PerformanceSummary(return)

 RStudioは、非常に使い勝手が良いです。Rユーザーであればmust-installのソフトになるでしょう。それにして、東電さん、大変…
 コピペ用に下にスクリプトを纏めておきました。
#STEP1
library(RFinanceYJ)
library(quantmod)
TODEN <- quoteStockXtsData('9501.t', '2011-01-01')
candleChart(TODEN)
#STEP2
rsi <- RSI(TODEN[, 4])
#STEP3
signal <- Lag(ifelse(rsi >= 0.5, 1, -1))
#STEP4
return <- ROC(TODEN[, 4])*signal
return <- return['2011-01-04/2011-03-28']
#STEP5
require(PerformanceAnalytics)
table.Drawdowns(return, top=5)
table.DownsideRisk(return)
charts.PerformanceSummary(return)