2013年1月25日金曜日

Rで225とSP500の週次での季節性を見る

日経225とSP500の週次での季節性を見る

最近、季節性の話を友達としてたので、week numbers別のreturnを色々とgraph化してみた。 対象は、日経225とSP500とする。データは、quantmodパッケージでUSのyahooから取得する。 以下のような関数を書いておいて週次ごとのreturnにしておく

library(quantmod)
## 週次return作成関数
get.nweek.return <- function(sym, syear = 2001, eyear = 2012) {
    ## 前年の終わりをstart日付にする
    fday <- as.Date(paste(syear, "-01-01", sep = "")) - 3
    org.data <- getSymbols(sym, from = fday, auto.assign = F)
    data <- adjustOHLC(org.data, use.Adjusted = T)[, 4]
    years <- format(range(index(data)), "%Y")
    d0 <- to.weekly(data)[, 1]
    d0 <- ROC(d0)[-1]
    dt <- do.call(rbind, lapply(syear:eyear, function(year) {
        tmp <- d0[as.character(year)]
        ret <- coredata(tmp)
        data.frame(year = year, nweek = 1:nrow(tmp), ret = ret)
    }))
    names(dt) <- c("year", "nweek", "ret")
    dt
}

でもって、SP500,日経225を取得、週次に加工、一つのデータフレームにまとめる。(gggplotでの表示用に) データの期間は、2001~2012年

## sp500とnikkeiを取得してrbindする
syear = 2001
eyear = 2012
spx <- get.nweek.return("^GSPC", syear, eyear)
spx$idx <- "sp500"
nk <- get.nweek.return("^N225", syear, eyear)
nk$idx <- "n225"
df <- rbind(spx, nk)

グラフ化する。 まず平均をみて、次にboxplotでばらつきをみて、最後に年数を絞って(2010-2012)個別の週次returnをそのまま見る まず、平均。

library(ggplot2)
library(plyr)
df0 <- ddply(df, .(nweek, idx), summarise, ret = mean(ret))
ggplot(df0, aes(factor(nweek), ret)) + geom_bar(stat = "identity") + facet_grid(idx ~ 
    .) + ggtitle(paste("average return by n-week", paste(syear, eyear, sep = "-")))
## Warning: Stacking not well defined when ymin != 0
## Warning: Stacking not well defined when ymin != 0

plot of chunk unnamed-chunk-3

次にboxplotでばらつき

p <- ggplot(df, aes(factor(nweek), ret))
p + geom_boxplot() + facet_grid(idx ~ .) + ggtitle(paste("boxplot of return by n-week", 
    paste(syear, eyear, sep = "-")))

plot of chunk unnamed-chunk-4

最後に個別の年のreturnを2010,2011,2012年で

df1 <- subset(df, year > 2009)
p1 <- ggplot(df1, aes(factor(nweek), ret, color = factor(year)))  ## lineの時はgroup化, group=factor(year)))
p1 + geom_point() + facet_grid(idx ~ .) + ggtitle("return by n-week year(2010-2012)")

plot of chunk unnamed-chunk-5

ドンチャンルールのバックテスト

ドンチャンルールのバックテスト

Rで簡単なバックテストです。

(* 以下のURLを参考にしました http://d.hatena.ne.jp/teramonagi/20110329/1301352620) (ただ、ここでの間違いがあれば、それは私です。)

1.定数を設定

ここでは、120日高値抜けでLONG、30日安値抜けでCLOSE POSを-1にすれば、SHORT

D1 <- 120
D2 <- 30
POS <- 1

2.データをload。ここでは日経225の現物を使う.indicatorとpostionをcbind(column bind)する

suppressPackageStartupMessages(library(quantmod))
org.data <- getSymbols("^N225", from = "2000-01-01", auto.assign = F)
data <- adjustOHLC(org.data, use.Adjusted = T)[, 1:4]
n1 <- ifelse(POS > 0, 1, 3)
n2 <- ifelse(POS > 0, 3, 1)
data <- cbind(data, DonchianChannel(data[, 4], D1)[, n1])
data <- cbind(data, DonchianChannel(data[, 4], D2)[, n2])
data <- cbind(data, data[, 4] == data[, 5])
data <- cbind(data, data[, 4] == data[, 6])
names(data)[5:8] <- c("ind1", "ind2", "sigEntry", "sigClose")
data$pos <- 0
data <- na.omit(data)

3.for-loopで、前日までのpositionを見ながら、当日のpositionを設定

これで、トレードした(positionをとった)ことになる。

## library(foreach) for-loopが順番依存なので、parallelは使えない??
for (i in 1:(nrow(data) - 1)) {
    data$pos[i + 1] <- if (data$sigEntry[i] == 1) {
        POS
    } else if (data$sigClose[i] == 1) {
        0
    } else {
        data$pos[i]
    }
}

4.損益をグラフかする。ROCでreturnを計算。,returnを一個lagする。

suppressPackageStartupMessages(library(PerformanceAnalytics))
chart.CumReturns(cbind(ROC(data[, 4]) * (POS), ROC(data[, 4]) * lag(data$pos)), 
    wealth.index = TRUE, main = paste(ifelse(POS > 0, "BuyHold", "SellHold"), 
        "=RED, TAAproach=BLUE", sep = ""))

plot of chunk unnamed-chunk-4

5.月別returnを見てみる

cat("monthly return\n")
## monthly return
ret.yearmon <- aggregate(coredata(ROC(data[, 4])) * lag(data$pos) * POS, as.Date(as.yearmon(index(data))), 
    function(x) exp(cumsum(x[1])))
hist(coredata(ret.yearmon), breaks = 50)

plot of chunk unnamed-chunk-5

これは、未実現損益含む。ほとんどの場合、ちょい負け。
じゃなくて、ポジションもたないとき(return=0)がでてるだけか、、、
なんか、プラスがおおい、、どこかおかしいかも、、

6.関連数値(サンプル期間、エントリー数、個別トレード期間、損益、対象物のreturn)

PerformanceAnalyticsの関数を使ったほうがいいが、勉強不足

cat("total return\n")
## total return
rl <- rle(as.vector(coredata(data$pos)))
cat(paste(paste("date range", paste(range(index(data)), collapse = "-"), sep = ":"), 
    paste("number entries:", sum(rl$values), "  position-day/all-day:", sum(rl$length[rl$values == 
        1]), "/", (nrow(data) - 1), sep = ""), paste("trade periods", paste(sort(rl$length[rl$values == 
        1], decreasing = T), collapse = " "), sep = ":"), paste("return", round(exp(sum(na.omit(coredata(ROC(data[, 
        4])) * lag(data$pos)) * POS)), 3), sep = ":"), paste("B&H return", round(exp(sum(na.omit(ROC(data[, 
        4]) * POS))), 3), sep = ":"), sep = "\n"), "\n")
## date range:2000-06-26-2013-01-22
## number entries:14  position-day/all-day:816/3084
## trade periods:189 106 69 65 62 51 46 43 39 37 37 25 24 23
## return:1.133
## B&H return:0.607

2012年8月30日木曜日

ggplotでのhorizon chart(Timely Portfolioのコードそのまま)


http://timelyportfolio.blogspot.jp/2012/08/horizon-on-ggplot2.html
このサイトの真似をしました。

銘柄コードを変えて、リターンのところをMACDにしました。
それだけですが、、比較としては割合わかりやすいかなと思う。









Loading ....





2012年8月24日金曜日

vxzとvxxのlong-shortの最適比率

google plusに過去に投稿したことのあるものの、コード貼り付けで投稿。

Loading ....


2012年8月22日水曜日

bloggerの動的ビューでgistを貼り付け

gistを利用したRのコード貼り付けテスト

bloggerのdynamic views 動的ビューで動くようにする。

例: 財務省発表の海外投資家資金の流出入のグラフ化コード
Loading ....

vmplayer のホットキー変更


** change hotkye in vmplayer on Windows7 it is in Users\UserName\AppData\Roaming\VMware\preferences.ini)
   and to the end if the file put this:
   pref.hotkey.shift = "true"
   pref.hotkey.alt = "true"
   pref.hotkey.control = "true"
   http://www.ok2cqr.com/linuxsw/how-to/87-how-to-change-ctrl-alt-hotkeys-in-vmware-player
  <2012-08-22 水 22:43>

2011年11月27日日曜日

主体別売買動向を眺める


東証と大証から、毎木曜日に主体別売買動向が発表される。
大口(海外投資家)の動向はとても大切なので、注目度も高い。
データとしては、トレーダーズのデータが詳しく、見やすい。http://www.traders.co.jp/domestic_stocks/stocks_data/investment_3/investment_3.asp
でも、若干データの範囲などが不完全?先物や2部の動向などもみたかたので、自分で整理したみた。Rを使う。東証のデータは、方眼紙のようなExcelファイルで提供される。windows側で、Rはあまりいじりたくないので、ubuntu側で処理した。RExcelXMLを使って処理した。
(* ファイル形式は、手作業で、xlsからxlxsにした。 xlsやxlsmでもいけたっぽいけど、帰ってくるデータ型がリストで面倒なので、xlsxでread.xlsxで読める形に)
データは、過去の分は月刊データになってしまうので、週別で取れる直近のもの限定。これから貯めないといかんのか?
データ処理のスクリプトは抜かして、データの形は、こんな感じ。
ret
         date      entity     product      uri      kai       net    gross
1    20111003      gaijin      topixf 6.19e+03 6.18e+03 -6.83e+00 1.24e+04
2    20111003       kojin      topixf 1.03e+02 9.66e+01 -6.81e+00 2.00e+02
3    20111003        jiko      topixf 4.17e+03 4.00e+03 -1.62e+02 8.17e+03
4    20111003        bank      topixf 5.62e+01 1.86e+01 -3.75e+01 7.48e+01
5    20111003    shintaku      topixf 4.83e+02 7.01e+02  2.18e+02 1.18e+03
6    20111003       hoken      topixf 3.00e+00 1.12e+01  8.23e+00 1.42e+01

日付(月の何週目か?), 売買主体, 商品(東証1部、二部、mothers, top先物、nikkei先物、mini, options)  あとは、ウリ、カイの売買代金、その差(net), その和(gross)

とりあえず、主体別の代金のネット(売り買いの差額)を見る。(optionを除く) (単位は、億円)
      date bank exfinancial exhojin gaijin hoken jigyo  jiko kojin shintaku shoken toshin
1 20111002  126           3      -3    908    -4   -35  -113  -425      -42    -60   -271
2 20111003 -192          -9      82   -788   -53   254   212   681      -27    -13   -297
3 20111004 -175         -36     112   3113   -73  -244  -110 -2201      -46    -44     23
4 20111101  -61         -14      41  -1518    65    89  -381  1658     -143     27     93
5 20111102  -48         -16      39  -1082  -421   311  -134   773      548     26    -35
6 20111103  121          30      70   -436  -154    33 -1212   378     1137     26     27

外人のウリに、個人の買い。先週は自己のウリも信託の買い。
自己は、OTC(or sgx, cme) みたいなので売買した裏返しが出てる可能性もあるかな?? それはそれでだが、、、

では、主体別 vs 商品で見てみる。

まず、ネット。(列別のallは ゼロになるべきだが、、元データからずれてるはずなので、気にしなくても良いはず。。)
        entity fut.225 fut.225.min mothers  topixf topixfm  tse1   tse2 (all)
1         bank     103        0.00    -0.1  -30.45    0.00  -301  -1.17  -230
2  exfinancial      -3       -0.15    -0.6   -0.10    0.00   -38  -0.04   -41
3      exhojin      43        0.48   -41.8    0.00    0.00   325  14.55   342
4       gaijin    -253      207.91    50.3  -80.40   -3.18   277  -0.95   198
5        hoken     -73        0.00     9.3   64.18    0.00  -638  -2.80  -641
6        jigyo     -40      -26.09    10.6    0.00    0.00   439  24.75   408
7         jiko    -284     -548.49   -15.5  764.78    0.67 -1650  -3.57 -1736
8        kojin     282      391.44   -43.2   -0.55   -0.82   257 -21.37   864
9     shintaku      45       -0.27    31.4 -663.27   -0.19  2015  -1.48  1426
10      shoken       0        0.00     3.7    0.00    0.00   -40  -2.18   -38
11      toshin     126        0.07    -3.6  -54.21    0.02  -522  -5.48  -459
12       (all)     -55       24.90     0.3   -0.02   -3.50   125   0.26    92

グロス
        entity fut.225 fut.225.min mothers topixf topixfm   tse1   tse2   (all)
1         bank    1564           0     0.2    535    0.00    666    1.2    2767
2  exfinancial     123          10     1.1     25    0.00    778    0.2     937
3      exhojin    1495         243    50.1      0    0.00   1136   18.0    2942
4       gaijin  187679      143142  1656.5  75318  285.10 317160  175.8  725416
5        hoken     405           0    14.1    399    0.00   2248    3.0    3069
6        jigyo    5337        1498   115.1      0    0.00   4752  123.7   11826
7         jiko   51042       27925   254.6  49820   17.15 100717   37.4  229813
8        kojin   36221       51783  3842.6   1076   37.16  97546  719.3  191226
9     shintaku    3910           5   206.7   5511    1.29  32320   33.0   41988
10      shoken       0           0   330.1      0    0.00   9052   73.7    9456
11      toshin    1502           2   170.6    716    0.02  11988   28.4   14408
12       (all)  289278      224608  6641.7 133401  340.72 578363 1213.6 1233847



金融機関は、miniやらないのか、、、代金的にはかなり接近してるけど、参加者の割合が違う。tickが狭まると困る人がいるのか? 自己はminiも結構やってる。個人はmini中心。

自己は、nikkei-topixでスプレッド持ってる?

東証2部は個人主体の相場。それで、ネットでは売ってるわけで、、、、だだ下がりなのか、、、過去データを見ないといかんが(これ直近6週データ)で、

マザーズも外人がそれなり?に入ってるんだな。。。

topix-miniも個人が少し(including me…)

で、トータルで見ると、結局、、、、自己 vs 信託 になっとる。自己はどっかでウリを受けてるのかな、、、信託は1400億のうち、半分くらいは日銀のETF買い。。。 構造的に自己が売っていて、信託が買っていて、周期的に外人が大波を作る。(あくまで、直近6週のデータだけど)

最近のだだ下がりは、上手く日銀買いを回避する前場の動向にも関係あるのかも、、、外人が買い越し基調に変われば、上げ潮でみんなで浮かべるんだけど、、、

ここ数年、相場から離れていたので、感覚がつかめないけど、11月の最終週あたりから、需給は好転するはずなんだけど、、、毎日バスケット売りが来るのかな、、、わからん。。。

あと、モーションチャートにもした。

http://www5292u.sakura.ne.jp/shutaibetu.html


PRESIDENT
/~\Fujisan.co.jpへ