0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

tidyquantでバックテスト

Last updated at Posted at 2019-09-14

Rでデータ操作と言えばTidyverseですが、RでQuantsと言えばQuantmodでしたが、最近の人はtidyquantなのでしょうか?
時系列操作というジャンルではtsibbleも便利なので難しいところですね。
今回はtidyquantを使って単純なストラテジーのバックテスト例を書いてみいます。

ライブラリを読み込んで組み込みデータを確認します。

require(tidyquant)
data(FANG)

FANG %>% select(symbol, date, adjusted) %>% 
  ggplot(aes(x = date, y = adjusted, colour = symbol)) +
  geom_line() +
  theme_tq() +
  scale_color_tq()+
  labs(title = "price")

image.png

EMA(20)を計算します。

term1 <- FANG %>% group_by(symbol) %>%
  tq_mutate(select = adjusted,
            mutate_fun = EMA, n = 20,
            col_rename = "ema")

リターン計算に使うROCを計算します。

term2 <- term1 %>% tq_mutate(select = adjusted,
                             mutate_fun = ROC,
                             col_rename = "roc")

シグナルとリターンを計算します。シグナルの発生から発注にはラグが発生するので注意が必要です。buy next bar at market;ということです。

term3 <- term2 %>% mutate(sig = lag(if_else(adjusted > ema, 1, -1)),
                          ret = roc * sig)

リターンの推移を確認します。

term3 %>% select(symbol, date, ret) %>% drop_na %>% 
  ggplot(aes(x=date, y=ret, colour = symbol)) +
  geom_line() +
  theme_tq()

image.png

累積リターンを可視化します。

term3 %>% drop_na %>% mutate(eq = cumsum(ret)) %>% 
  select(symbol, date, eq) %>% 
  ggplot(aes(x = date,y = eq, colour = symbol)) +
  geom_line()+
  theme_tq()+
  scale_color_tq()+
  geom_hline(colour = "darkgray", yintercept = 0)

image.png

もっと複雑なストラテジーも簡単にテストできます。
コスト計算やポートフォリオリターンについての分析も必要です気が向いたらそれらについても記事を書きます。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?