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

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

今回は、売買履歴を記録して損益を計算するために考えていることのメモ。
前提は下記。ポートフォリオ管理が出来るほどのRリテラシーは無い(涙)ので、当分は1銘柄固定で。

・銘柄は1銘柄固定
・買いシグナルの直後の売りシグナルで、全てのポジションを解消する
・買いシグナルと売りシグナルの発生は排反事象
・買い付け株式数は考えないw(今回は株価の差額でリターンを計算)

とりあえず、LongとShortのシグナルを発生させる関数を作成して実行。
今回は単純にlongSignal_smaGC関数で移動平均ゴールデンクロスで買いシグナル発生、shortSignal_smaGC関数で移動平均デッドクロスで売りシグナル発生。
※)銘柄は7203トヨタで、これは事前にgetSymbols関数などで取得しておく。

#LongとShortのシグナルを発生させる
sigLong_smaGc<-longSignal_smaGC(YJ7203[,4])
sigShort_smaGc<-shortSignal_smaGC(YJ7203[,4])

#LongとShortの結果を結合
sigSmaCross<-cbind(sigLong_smaGc, sigShort_smaGc)

ViewでsigSmaCrossの結果を見ると次のような感じ。

さて、ここからどのように実装すべきなのかを手探り状態だが、とりあえず次の方法は直ぐに思いついたのでメモ。恐らくこれは汚いやり方なのだろうけど・・・。

                                                                            • -

1.7203の株価とシグナル結果を結合してみる

trade_smaGC<-cbind(YJ7203, sigLong_smaGc, sigShort_smaGc)

2.LongまたはShortのシグナルが発生したデータだけに絞り込んでみる

#Long、Shortのシグナルが発生したインデックスをそれぞれ取得する
longTradeIndex<-which(trade_smaGC[,7]==1)
shortTradeIndex<-which(trade_smaGC[,8]==1)

#シグナルが発生したインデックスのデータのみを抽出する
orderResult<-rbind(trade_smaGC[buyTradeIndex], trade_smaGC[sellTradeIndex])

3.2で求めた結果のdiffを取り、Long直後のShortでポジションを閉じた場合のリターンを計算する

returnTable<-diff(orderResult)[which(diff(orderResult)[,8]==1)]

4.リターンの累積和をグラフにする
2014年1月1日から2016年1月30日までの終値のリターン(終値の差額)の累積和を描いてみる。

plot(cumsum(returnTable['2014-01-01/2016-01-30'][,4]))


                                                                            • -

以上だが、実に駄目そうなやり方だ。リテラシーなくても直感的にそう思う。引き続き調べよう・・・。