平均回帰戦略①

価格比

 通貨ペアそのものが一種の価格比である。

 通貨ペアと通貨ペアの価格比ということも考えられる。

通貨ペア:CHFJPY
期間:2002年1月1日~2013年12月6日
ルール①:前日終値が前日の移動平均線より下なら買い、上なら売り。
ルール②:ユニット数は前日の「-(終値-平均)/標準偏差」で計算(プラスなら買い、マイナスなら売りとなる)。
ルール③:ポジションは当日終値で決済。
備考①:約定価格は前日終値。
備考②:ユニット数はいくらでも細分化できると仮定している。
備考③:損益の単位は%。
備考④:コストは考慮していない。
備考⑤:平均、標準偏差の計算期間は5~250まで5刻みとし、計50回のバックテストを行う。

# パッケージの呼び出し
library(quantmod)
# 開始日
s_date <- as.Date("2002-01-01")
# 終了日
e_date <- as.Date("2013-12-06")
# 従属変数の終値
y <- data$CHFJPY.Close
# 独立変数の終値
x <- data$CHFJPY.Close
# 従属変数の変化率
deltay <- diff(y,lag=1)/lag(y,k=1)*100
# 結果を格納するオブジェクト
result <- matrix(0,nrow=50,ncol=3)
colnames(result) <- c("lookback","totalret","r2")
# バックテスト
for(i in 1:50) {
# 計算期間
lookback <- 5*i
# 平均
avg <- rollapply(x,lookback,mean)
# 標準偏差
std <- rollapply(x,lookback,sd)
# ユニット数
unit <- -(x-avg)/std
# 損益
ret <- deltay*lag(unit,k=1)
# 累積損益
totalret <- cumsum(window(ret,start=s_date,end=e_date))
# R2
r2 <- cor(totalret,1:length(totalret))^2
# 結果の記録
result[i,1] <- lookback
result[i,2] <- last(totalret)
result[i,3] <- r2
}
# 結果
result

lookback totalret r2
[1,] 5 25.71399 0.480331626
[2,] 10 11.64488 0.002784168
[3,] 15 35.20790 0.345163147
[4,] 20 33.58402 0.224780657
[5,] 25 32.89175 0.238634292
[6,] 30 41.47836 0.373210561
[7,] 35 62.63039 0.623849285
[8,] 40 70.13416 0.682573021
[9,] 45 66.14133 0.667032653
[10,] 50 65.55718 0.677851129
[11,] 55 66.50670 0.705007830
[12,] 60 65.43298 0.702057569
[13,] 65 58.98334 0.671534784
[14,] 70 50.50523 0.630691306
[15,] 75 47.72090 0.627532750
[16,] 80 46.39786 0.637864115
[17,] 85 46.83050 0.656088300
[18,] 90 48.33906 0.680960158
[19,] 95 49.95273 0.693726123
[20,] 100 49.68568 0.687044039
[21,] 105 45.51371 0.665788168
[22,] 110 41.83426 0.653113340
[23,] 115 39.18592 0.640185167
[24,] 120 35.98266 0.630235749
[25,] 125 35.06493 0.637322098
[26,] 130 33.67332 0.632711955
[27,] 135 31.40494 0.619577180
[28,] 140 31.30576 0.621924140
[29,] 145 31.26201 0.635189788
[30,] 150 31.73725 0.649898269
[31,] 155 30.29164 0.651498447
[32,] 160 28.98506 0.655429543
[33,] 165 29.10657 0.666308955
[34,] 170 30.53916 0.684299273
[35,] 175 31.67098 0.694988318
[36,] 180 31.51572 0.697167410
[37,] 185 31.22959 0.701991452
[38,] 190 31.25150 0.700562776
[39,] 195 32.74390 0.711077928
[40,] 200 33.68755 0.717666435
[41,] 205 33.25495 0.715575410
[42,] 210 32.53684 0.714715444
[43,] 215 32.18466 0.715184198
[44,] 220 32.06496 0.716564771
[45,] 225 31.59904 0.714700396
[46,] 230 31.36768 0.713494871
[47,] 235 31.23269 0.709778798
[48,] 240 31.29810 0.706748811
[49,] 245 32.11755 0.710365192
[50,] 250 32.49465 0.713142575
# グラフ
lookback <- 40
avg <- rollapply(x,lookback,mean)
std <- rollapply(x,lookback,sd)
unit <- -(x-avg)/std
ret <- deltay*lag(unit,k=1)
totalret <- cumsum(window(ret,start=s_date,end=e_date))
matplot(totalret,type="l")

コメントの投稿

非公開コメント

プロフィール

Author:fxst24
自分用のノートとして作っていますが、同学の方々の参考になれば幸いです。
記事はことわりなく修正、削除、非公開にすることがあります。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
QRコード
QR