Rとトレード

Rでヒストリカルボラティリティの計算

Rでヒストリカルボラティリティを計算してみた。 # Calculate HV getHV <- function(stockPrice, hvLength){ # 株価前日比 roc <- stockPrice/lag(stockPrice, k=1) #HVを20日間計算 hv<-rollapply(roc, hvLength, sd)*sqrt(250) return(hv) } ロイターの端…

売買履歴を記録して損益を計算する 〜 考え中

QuantStratを使えないものかを検証していたが、Rリテラシーの低さから一旦中止して、オレオレ検証をしている最中。品質などはとりあえず後回しにして、兎に角検証と失敗を繰り返してとりあえず形はどうあれ見たいものを見れるようにするところを目標としてい…

オブジェクト名からオブジェクトを生成する

Javaのリフレクションのようなことができないか調べていた。 相変わらずRリテラシーは低いので、基本的なことから調べている。さて、なぜこのようなことをしたいのかというと、前回「quantmodのgetSymbolsで取得した株価データから株価コードを取り出す」の…

quantmodのgetSymbolsで取得した株価データから株価コードを取り出す

株価の取得。 symbols <- c("YJ7203", "YJ4751") stocks <- getSymbols(symbols, from="2008-01-01", to="2016-02-12", src="yahooj", adjust=TRUE) これで株価がsymbolsで指定した名前のオブジェクトで取得される。今回は、取得したオブジェクトから株価コ…

Rでドット「.」での文字列分割

文字列分割の関数strsplitを使用して、ドット「.」を区切り文字にして文字列分割を行う際の話。 いきなり失敗しましたよ。このようなドット「.」区切りの文字列を考えて分割する。 期待値は"test"と"1234"という2つの文字列に分割されること。 > strTest [1]…

Quantstratを使う4

「Quantstratを使う3」から引き続きQuantstratの使い方を学習中。というかハマっているw。 色々なものがパッケージ化されているため便利な反面、隠蔽されているということでもあり、スクラッチで実装する方法が直ぐに分かるものでも、実現方法が分からない…

xts時系列データに対して直近n日間(計算日前日から数えて過去n日間)の最小値を求める

タイトルの件、すぐに出来なかった。 Rリテラシーが低いことを改めて認識したわ。さて、やりたいことは改めてこれ。 xts時系列データに対して直近n日間(計算日前日から数えて過去n日間)の最小値を求める 例えば、下記のようにYJ7203.Closeの前日から過去に…

Quantstratを使う3

「Quantstratを使う2 〜 簡単な実装」の続き。 トヨタの株価を使用して、単純に、終値が75日移動平均より上の場合に買うロジックを作ってみた。 目的はツールの使い方を調べることで、学習中なので売りロジックなど入っていない。 このような単純なロジック…

単純移動平均とモーメンタムの関係について

- (追記 2016/01/28) 当初エントリー内容に新しく内容を追加。また、プログラムの変数名も自分が分かりやすいように変更。ただし、最終的な結果は同じで変更は無し。 - 必要なライブラリの読み込み。 require(quantmod) require(TTR) require(PerformanceAna…

Quantstratを使う1 〜 インストール 

まず初めに、このエントリーは「Using Quantstrat」を元に作成している。 正確な情報はこのPDFを参照。さて、8ページ目あたりに下図がある。 今回の対象範囲に赤丸を付けた。QuantStratとはその名の通り、トレードシグナルのロジックを作成するためのツール…

リスクについて

まずは、必要なRの関数について。 ・cummax関数 引数に与えたベクトルの要素について、それまでの要素の最大値を求める。 日本語では上手く言えないが試してみれば分かる。 > cummax(c(1,5,2,6,7,8,9,10,2)) [1] 1 5 5 6 7 8 9 10 10 この関数を使用してドロ…

Quantstratを使う2 〜 簡単な実装

前回「Quantstratを使う1 〜 インストール」ではインストールまで終わったので、簡単な実装をしてみる。■トレード戦略 ・シンボルデータ -GBPUSD -30分足のOHLCデータ・2つのSMAのデッドクロス/ゴールデンクロスを使用 -SMA10 -SMA30・エントリーロジック -…

シグナル集計

前回「シグナルの生成と検証」の続き。 > prev_x_qty<-0 > position<-0 > trade_size<-100 > signal<-as.numeric(data$signal) > signal[is.na(signal)]<-0 > beta<-as.numeric(data$betas) > qty_x<-rep(0, length(signal)) > qty_y<-rep(0, length(signal)…

シグナルの生成と検証

前回「スプレッドの構築」の続き。とりあえず、写経したところまでメモ。各種設定値およびデータの作成。 # ローリング期間 > window_length <- 10 # データ開始日・終了日 > start_date<-"2013-01-01" > end_date<-"2013-12-31" # データ範囲文字列の作成 >…

スプレッドの構築

スプレッドを計算する関数。 > calculate_spread<-function(x, y, beta){ + return (y - beta*x) + } βとレベルを計算する関数。 > calculate_beta_and_level<-function(x, y, start_date, end_date){ + require(xts) + time_range<-paste(start_date, "::",…

主成分を計算する

「共和分と総最小二乗法(TLS) 〜 主成分分析(PCA)の利用」の続き。データは「TOPIXと個別銘柄の価格」で求めた、UFJとTOPIXのデータを使用する。 > head(YJ8306_20130101_20140101) YJ8306.Open YJ8306.High YJ8306.Low YJ8306.Close YJ8306.Volume YJ83…

共和分と総最小二乗法(TLS) 〜 主成分分析(PCA)の利用

「COINTEGRATION AND TOTAL-LEAST-SQUARES REGRESSION」を読んでのメモ*1。まずはこの5点。 1.ある1つの株価データを使って、別の株価データの動きを計算する 2.線形回帰「株価A〜株価B」を計算し、式「株価A = intercept + beta * 株価B」におけるbeta…

TOPIXと個別銘柄の価格

前回「2銘柄の価格」で行ったことをTOPIXと個別銘柄で行う。TOPIX株価取得。 > YJ998405_20130101_20140101<-getSymbols("YJ998405", src="yahooj", auto.assign=FALSE, from='2013-01-01', to='2014-01-01') > head(YJ998405_20130101_20140101) YJ998405.O…

2銘柄の価格

株価の取得。 > YJ4528<-getSymbols("YJ4528", src="yahooj", auto.assign=FALSE, from='2013-01-01', to='2014-01-01') > head(YJ4528) YJ4528.Open YJ4528.High YJ4528.Low YJ4528.Close YJ4528.Volume YJ4528.Adjusted 2013-01-04 4475 4500 4445 4500 27…

自己相関いくつか

前回は相関についてメモした。前回のTOPIXのリターンデータの相関、2乗の相関、絶対値の自己相関をメモしておく。1次の自己相関。 > acf(YJ998405_returns) 2次の自己相関。 > acf(YJ998405_returns*YJ998405_returns) 絶対値の自己相関。 > acf(abs(YJ99840…

相関 〜 続編

トヨタ自動車のデータを取得。 > getSymbols("YJ7203", src='yahooj') [1] "YJ7203" > head(YJ7203) YJ7203.Open YJ7203.High YJ7203.Low YJ7203.Close YJ7203.Volume YJ7203.Adjusted 2007-01-04 8110 8140 8060 8090 6986200 8090 2007-01-05 8100 8100 78…

相関

国語と算数の点数を格納したベクトルを作り、分散と共分散を計算する。 国語と算数の点数は、合計で10点だとする。 > kokugo<-c(5,3,8,7,9) > sansu<-c(5,7,2,3,1) > var(kokugo,sansu) [1] -5.8 > cov(kokugo,sansu) [1] -5.8 合計で100点の場合は次のよう…

検定を行う前に 〜 データの整備

前回「urcaパッケージを使用した定常性検定 〜 続編」では、shapiro検定を使用して、TOPIX日次リターンの正規性を確認した。ところで、仮に検定対象のデータに異常値が含まれていたら検定結果はどのようになるのか。これが今回のテーマ。 > set.seed(100) > …

urcaパッケージを使用した定常性検定 〜 続編

前回「urcaパッケージを使用した定常性検定」の続き。今回はTOPIXのリターンについて、リターンの分布を調べる。 ※)ちなみに、以前のエントリー「Rで確率・統計の中級 〜 株価の分布」では(TOPIXではないが)価格の分布を調べた。その時、価格分布は非定常…

urcaパッケージを使用した定常性検定

urcaパッケージについては、マニュアル参照。 ざっとコードを追って、補足は追々後日しておく。 > getSymbols('YJ2489.T', src='yahooj') # アドウェイズの株価取得 [1] "YJ2489.T" > head(YJ2489.T) # 株価確認 YJ2489.T.Open YJ2489.T.High YJ2489.T.Low Y…

Rで確率・統計の中級 〜 株価の分布

価格分布を描く。 > T6758_AdjClose<-T6758$YJ6758.T.Adjusted > head(T6758_AdjClose) YJ6758.T.Adjusted 1983-01-04 1586.36 1983-01-05 1595.45 1983-01-06 1577.27 1983-01-07 1590.91 1983-01-08 1581.82 1983-01-10 1563.64 > T6758_MeanAdjClose<-mea…

Rで確率・統計の基礎2 〜 中心極限定理

前回「Rで確率・統計の基礎1 〜 母集団と標本」の続き。前回とは異なり、常に10個の抽出を行って平均を取得し、それらをリストmean_listに入れる。 そのヒストグラムを描き、Xの平均を縦線で追加で描く。 > mean_list<-list() > for(i in 1:10000){ + mean_…

Rで確率・統計の基礎1 〜 母集団と標本

乱数を生成してヒストグラムを描き、その上に平均値を縦線で描く。 ほぼ教科書通り。 > set.seed(100) > X <- rnorm(1000000, mean = 2.33, sd = 0.5) > mu <- mean(X) > sd <- sd(X) > hist(X, breaks=100) > abline(v=mu, lwd =3, lty =1) set.seed(引数)…

ggplot2でグラフ作成

前回は「quantmodでグラフ作成」だったが、今回はggplot2を使用する。データの確認。 > head(T6758) YJ6758.T.Open YJ6758.T.High YJ6758.T.Low YJ6758.T.Close YJ6758.T.Volume YJ6758.T.Adjusted 1983-01-04 1755 1770 1745 1745 309800 1586.36 1983-01-0…

quantmodでグラフ作成

前回「quantmodで株価データ取得」で取得したデータ「T6758」を使用したグラフを描いてみる。使用する関数はchartSeries。Rのプロンプトで「?chartSeries」と入力するとブラウザでAPIの仕様を読むことができる。 下記のようなもので、一部引用した。 Descrip…