パターン戦略①

連続下落買い・連続上昇売り

買いのみ

通貨ペア:AUDUSD
期間:1999年1月1日~2013年11月29日
ルール①:終値が3日前、前々日、前日と3日連続で下落したら買い。
ルール②:ポジションはholdday-1日後の終値で決済。
ルール③:ユニット数は1/holdday。
備考①:約定価格は前日終値。
備考②:損益の単位は%。
備考③:コストは考慮していない。

# パッケージの呼び出し
library(quantmod)
# 開始日
s_date <- as.Date("1999-01-01")
# 終了日
e_date <- as.Date("2013-11-29")
# 従属変数の終値
y <- data$AUDUSD.Close
# 独立変数の終値
x <- data$AUDUSD.Close
# 従属変数の変化率
deltay <- diff(y,lag=1)/lag(y,k=1)*100
# 独立変数の変化率
deltax <- diff(x,lag=1)/lag(x,k=1)*100
# 結果を記録するオブジェクト
result <- matrix(0,nrow=50,ncol=3)
colnames(result) <- c("holdday","cumret","r2")
# バックテスト
for(i in 1:50) {
holdday <- i
long <- deltax<0 & lag(deltax,k=1)<0 & lag(deltax,k=2)<0
pos <- 0
for(j in 0:(holdday-1)) {
pos <- pos+lag(long,k=j)
}
ret <- deltay*lag(pos,k=1)/holdday
cumret <- cumsum(window(ret,start=s_date,end=e_date))
r2 <- cor(cumret,1:length(cumret))^2
result[i,1] <- holdday
result[i,2] <- last(cumret)
result[i,3] <- r2
}
# 結果の表示
result

holdday cumret r2
[1,] 1 29.1542147 0.896120663
[2,] 2 15.4816377 0.556926398
[3,] 3 12.3942759 0.529939853
[4,] 4 3.9144366 0.004156244
[5,] 5 1.1678680 0.023650113
[6,] 6 -2.1117376 0.134361463
[7,] 7 0.5156685 0.014948072
[8,] 8 1.6004535 0.001355843
[9,] 9 3.9098034 0.082466031
[10,] 10 3.7722390 0.106433334
[11,] 11 4.7831402 0.186394405
[12,] 12 4.4139710 0.186923789
[13,] 13 3.4671169 0.115199064
[14,] 14 4.9404068 0.273994380
[15,] 15 5.1595729 0.298006784
[16,] 16 3.9209347 0.216856089
[17,] 17 1.7528458 0.068721164
[18,] 18 2.5729252 0.155130310
[19,] 19 3.8141710 0.309849264
[20,] 20 4.7967495 0.405179687
[21,] 21 5.1907451 0.457870187
[22,] 22 5.3642876 0.451301195
[23,] 23 4.9170989 0.378002921
[24,] 24 4.9306369 0.336065313
[25,] 25 4.6076426 0.240335414
[26,] 26 5.1397705 0.310684488
[27,] 27 3.7740109 0.190293466
[28,] 28 3.2179145 0.172533857
[29,] 29 2.8223930 0.173280086
[30,] 30 2.4334115 0.165458301
[31,] 31 2.2411337 0.143887290
[32,] 32 3.1315516 0.217848116
[33,] 33 3.2562135 0.211314675
[34,] 34 3.1861469 0.207326388
[35,] 35 2.3581769 0.106198594
[36,] 36 1.9387018 0.051335467
[37,] 37 2.0051072 0.041800885
[38,] 38 1.7158079 0.024859637
[39,] 39 1.6007600 0.024331113
[40,] 40 1.6032779 0.033534857
[41,] 41 1.7033740 0.046646155
[42,] 42 1.5649296 0.027697434
[43,] 43 1.5981862 0.027581298
[44,] 44 2.0889878 0.059034947
[45,] 45 2.7564735 0.149987549
[46,] 46 2.3325027 0.121639461
[47,] 47 2.1190202 0.120074886
[48,] 48 2.1374127 0.123662687
[49,] 49 2.6493421 0.189265164
[50,] 50 3.2695629 0.270831062

売りのみ

通貨ペア:AUDUSD
期間:1999年1月1日~2013年11月29日
ルール①:終値が3日前、前々日、前日と3日連続で上昇したら売り。
ルール②:ポジションはholdday-1日後の終値で決済。
ルール③:ユニット数は1/holdday。
備考①:約定価格は前日終値。
備考②:損益の単位は%。
備考③:コストは考慮していない。

# パッケージの呼び出し
library(quantmod)
# 開始日
s_date <- as.Date("1999-01-01")
# 終了日
e_date <- as.Date("2013-11-29")
# 従属変数の終値
y <- data$AUDUSD.Close
# 独立変数の終値
x <- data$AUDUSD.Close
# 従属変数の変化率
deltay <- diff(y,lag=1)/lag(y,k=1)*100
# 独立変数の変化率
deltax <- diff(x,lag=1)/lag(x,k=1)*100
# 結果を記録するオブジェクト
result <- matrix(0,nrow=50,ncol=3)
colnames(result) <- c("holdday","cumret","r2")
# バックテスト
for(i in 1:50) {
holdday <- i
short <- deltax>=0 & lag(deltax,k=1)>=0 & lag(deltax,k=2)>=0
pos <- 0
for(j in 0:(holdday-1)) {
pos <- pos-lag(short,k=j)
}
ret <- deltay*lag(pos,k=1)/holdday
cumret <- cumsum(window(ret,start=s_date,end=e_date))
r2 <- cor(cumret,1:length(cumret))^2
result[i,1] <- holdday
result[i,2] <- last(cumret)
result[i,3] <- r2
}
# 結果の表示
result

holdday cumret r2
[1,] 1 15.323046 0.4502514
[2,] 2 4.494773 0.1431856
[3,] 3 -2.806339 0.5714724
[4,] 4 -9.919857 0.7433972
[5,] 5 -9.900969 0.7517511
[6,] 6 -9.997175 0.7782334
[7,] 7 -8.970351 0.8268604
[8,] 8 -7.952554 0.8227015
[9,] 9 -6.675880 0.7914359
[10,] 10 -4.578121 0.7536261
[11,] 11 -5.540292 0.7847044
[12,] 12 -5.091272 0.7604331
[13,] 13 -4.730678 0.7226214
[14,] 14 -2.315191 0.5753263
[15,] 15 -2.280716 0.5839538
[16,] 16 -3.334872 0.6988283
[17,] 17 -3.854753 0.7091032
[18,] 18 -5.308207 0.7281331
[19,] 19 -5.939128 0.7354748
[20,] 20 -5.455179 0.7006915
[21,] 21 -5.080898 0.6749409
[22,] 22 -5.045093 0.6557158
[23,] 23 -4.720261 0.6349595
[24,] 24 -4.647061 0.6309246
[25,] 25 -5.680367 0.7070348
[26,] 26 -5.774634 0.7412682
[27,] 27 -5.984484 0.7205932
[28,] 28 -6.860297 0.7409124
[29,] 29 -7.501947 0.7628343
[30,] 30 -7.571693 0.7681804
[31,] 31 -7.254081 0.7663903
[32,] 32 -7.207126 0.7715710
[33,] 33 -7.137495 0.7706820
[34,] 34 -6.688841 0.7540104
[35,] 35 -6.296141 0.7241197
[36,] 36 -5.809160 0.6925792
[37,] 37 -5.864469 0.6961770
[38,] 38 -7.527022 0.7410495
[39,] 39 -6.929695 0.7300910
[40,] 40 -7.288701 0.7310339
[41,] 41 -7.655581 0.7305280
[42,] 42 -7.552992 0.7297861
[43,] 43 -7.198291 0.7270770
[44,] 44 -6.679356 0.7147217
[45,] 45 -6.503836 0.6981714
[46,] 46 -6.278536 0.6848947
[47,] 47 -5.983057 0.6735135
[48,] 48 -6.063105 0.6859215
[49,] 49 -6.379116 0.6979012
[50,] 50 -6.291863 0.6932532

売買両方

通貨ペア:AUDUSD
期間:1999年1月1日~2013年11月29日
ルール①:終値が3日前、前々日、前日と3日連続で下落したら買い、上昇したら売り。
ルール②:ポジションはholdday-1日後の終値で決済。
ルール③:ユニット数は1/holdday。
備考①:約定価格は前日終値。
備考②:損益の単位は%。
備考③:コストは考慮していない。

# パッケージの呼び出し
library(quantmod)
# 開始日
s_date <- as.Date("1999-01-01")
# 終了日
e_date <- as.Date("2013-11-29")
# 従属変数の終値
y <- data$AUDUSD.Close
# 独立変数の終値
x <- data$AUDUSD.Close
# 従属変数の変化率
deltay <- diff(y,lag=1)/lag(y,k=1)*100
# 独立変数の変化率
deltax <- diff(x,lag=1)/lag(x,k=1)*100
# 結果を記録するオブジェクト
result <- matrix(0,nrow=50,ncol=3)
colnames(result) <- c("holdday","cumret","r2")
# バックテスト
for(i in 1:50) {
holdday <- i
long <- deltax<0 & lag(deltax,k=1)<0 & lag(deltax,k=2)<0
short <- deltax>=0 & lag(deltax,k=1)>=0 & lag(deltax,k=2)>=0
pos <- 0
for(j in 0:(holdday-1)) {
pos <- pos+lag(long,k=j)-lag(short,k=j)
}
ret <- deltay*lag(pos,k=1)/holdday
cumret <- cumsum(window(ret,start=s_date,end=e_date))
r2 <- cor(cumret,1:length(cumret))^2
result[i,1] <- holdday
result[i,2] <- last(cumret)
result[i,3] <- r2
}
# 結果の表示
result

holdday cumret r2
[1,] 1 44.4772602 0.8402967244
[2,] 2 19.9764109 0.1970515550
[3,] 3 9.5879371 0.0001296799
[4,] 4 -6.0054209 0.4590507753
[5,] 5 -8.7331014 0.5620752654
[6,] 6 -12.1089126 0.6117071484
[7,] 7 -8.4546827 0.6455372456
[8,] 8 -6.3521001 0.6107176125
[9,] 9 -2.7660768 0.4380282855
[10,] 10 -0.8058820 0.2885593123
[11,] 11 -0.7571522 0.2037417045
[12,] 12 -0.6773010 0.1743866466
[13,] 13 -1.2635612 0.1925146691
[14,] 14 2.6252161 0.0104317620
[15,] 15 2.8788565 0.0112873402
[16,] 16 0.5860622 0.1634137773
[17,] 17 -2.1019067 0.2856040508
[18,] 18 -2.7352820 0.2763713842
[19,] 19 -2.1249574 0.1928149271
[20,] 20 -0.6584295 0.1102301917
[21,] 21 0.1098470 0.0726473510
[22,] 22 0.3191948 0.0782446309
[23,] 23 0.1968378 0.0856910981
[24,] 24 0.2835755 0.1104033508
[25,] 25 -1.0727249 0.2233671007
[26,] 26 -0.6348636 0.2119615693
[27,] 27 -2.2104733 0.2844555063
[28,] 28 -3.6423822 0.3634400519
[29,] 29 -4.6795545 0.4336968697
[30,] 30 -5.1382812 0.4988585147
[31,] 31 -5.0129474 0.5106677813
[32,] 32 -4.0755741 0.5319462605
[33,] 33 -3.8812815 0.5502066732
[34,] 34 -3.5026945 0.5520230166
[35,] 35 -3.9379638 0.5584091355
[36,] 36 -3.8704581 0.5391728804
[37,] 37 -3.8593622 0.5632561341
[38,] 38 -5.8112145 0.6302894629
[39,] 39 -5.3289353 0.6317080333
[40,] 40 -5.6854226 0.6260975463
[41,] 41 -5.9522073 0.6011579815
[42,] 42 -5.9880628 0.5812639444
[43,] 43 -5.6001049 0.5445987685
[44,] 44 -4.5903684 0.4895802489
[45,] 45 -3.7473629 0.4395809758
[46,] 46 -3.9460335 0.4542683703
[47,] 47 -3.8640366 0.4518076521
[48,] 48 -3.9256925 0.4626131619
[49,] 49 -3.7297741 0.4413695118
[50,] 50 -3.0223001 0.3878777401

# グラフの表示
holdday <- 1
long <- deltax<0 & lag(deltax,k=1)<0 & lag(deltax,k=2)<0
short <- deltax>=0 & lag(deltax,k=1)>=0 & lag(deltax,k=2)>=0
pos <- 0
for(i in 0:(holdday-1)) {
pos <- pos+lag(long,k=i)-lag(short,k=i)
}
ret <- deltay*lag(pos,k=1)/holdday
cumret <- cumsum(window(ret,start=s_date,end=e_date))
matplot(cumret,type="l")
renzoku1.jpeg

コメントの投稿

非公開コメント

プロフィール

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

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