R

Rで乱数、確率密度分布関数、累積分布関数のプロット

次の流れで実施。 1.データ準備 2.プロット ◎標準正規分布 #初項-10、公差0.1、長さ20の数列を作成する x<-seq(from=-10, by=0.1, 20) #標準正規分布 plot(x, rnorm(x, mean=0, sd=1), type="l") #乱数 plot(x, dnorm(x, mean=0, sd=1), type="l") #確率…

大数の法則と中心極限定理

以前、「Rで確率・統計の基礎2 〜 中心極限定理」でも書いたが、再び。意識していないとすぐに細かなところを忘れるので。 ◎中心極限定理とは 標本サイズをnとするとき、標本サイズnを大きくしていくと、母集団分布に関係なく標準化した標本平均の確率分布…

モンテカルロ法による円周率の計算をRで行う

モンテカルロ法を使用して、息抜きにRで円周率の計算を行う。有名問題なので背景はこの辺を参照。 L=1 count = 1000000 x = runif(count,0,L) #0からLの間の乱数を発生させる y = runif(count,0,L) #0からLの間の乱数を発生させる pi = 4*sum(x**2+y**2

日経225のベーシス(先物価格−現物価格)について

2000年1月4日から2016年9月12日までのベーシス(日経225先物直近限月終値−日経225現物終値)を描いたのが次図。 これだと特徴が見えづらいので、期間を絞り込む。 2008年1月4日から2016年9月12日までのベーシスを描いたのが次図。 周期60日として単純にseaso…

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) } ロイターの端…

Rで行列とベクトルの積

Rで行列とベクトルの積を計算しようと思ったら期待通りにならなかったのでメモ。 知らなかったーw。◎やりたいこと 1行2列のベクトルを、2行2列の行列に左から掛けた結果を得たい。そして、最後にその結果に1行2列の転置ベクトルを掛けてスカラー値を得たい…

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

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]…

RStudioで複数行コメントなど幾つかのショートカットキー

ショートカットキー覚えられない。。。 ◎複数行コメント ctrl+shift+c ◎インデント tab。 戻すには、shift+tabもしくはctrl+I。 ◎カーソル位置以降の行切り取り ctrl+K。 貼り付けるには ctrl+Y ◎カーソル位置以前の行切り取り ctrl+U

RStudioでデバッグ

古い情報しか見ていなくて、Rのデバッグめんどくせーなーなんて思っていたシロートです。次のコードを使用して、RStudioでのデバッグ方法を確認した。 ※)確認したと言っても、ブレークポイントつけて、ステップオーバーやステップインの方法を確かめただけ…

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) > …