200日移動平均線を使った戦略
単独で使われるよりはむしろフィルターとして使われることが多いように思われる。
買いのみ
通貨ペア:AUDUSD
期間:1999年1月1日~2013年11月29日
ルール①:前日終値が前日の200日移動平均線以上であれば買い。
ルール②:ポジションはholdday-1日後の終値で決済。
ルール③:ユニット数は1/holdday。
備考①:約定価格は前日終値。
備考②:損益の単位は%。
備考③:コストは考慮していない。
売りのみ
通貨ペア:AUDUSD
期間:1999年1月1日~2013年11月29日
ルール①:前日終値が前日の200日移動平均線より下であれば売り。
ルール②:ポジションはholdday-1日後の終値で決済。
ルール③:ユニット数は1/holdday。
備考①:約定価格は前日終値。
備考②:損益の単位は%。
備考③:コストは考慮していない。
売買両方
通貨ペア:AUDUSD
期間:1999年1月1日~2013年11月29日
ルール①:前日終値が前日の200日移動平均線以上であれば買い、前日の200日移動平均線より下であれば売り。
ルール②:ポジションはholdday-1日後の終値で決済。
ルール③:ユニット数は1/holdday。
備考①:約定価格は前日終値。
備考②:損益の単位は%。
備考③:コストは考慮していない。
買いのみ
通貨ペア:AUDUSD
期間:1999年1月1日~2013年11月29日
ルール①:前日終値が前日の200日移動平均線以上であれば買い。
ルール②:ポジションは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
# 200日移動平均線
ma200 <- rollapply(y,200,mean)
# 結果を記録するオブジェクト
result <- matrix(0,nrow=50,ncol=3)
colnames(result) <- c("holdday","cumret","r2")
# バックテスト
for(i in 1:50) {
holdday <- i
long <- x>=ma200
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 46.26646 0.8522554
[2,] 2 51.34050 0.8698867
[3,] 3 54.57987 0.8822235
[4,] 4 52.83684 0.8787421
[5,] 5 51.91154 0.8789105
[6,] 6 50.58038 0.8769415
[7,] 7 50.23229 0.8784853
[8,] 8 49.62894 0.8806223
[9,] 9 48.47857 0.8779677
[10,] 10 46.47420 0.8710706
[11,] 11 44.73400 0.8649235
[12,] 12 43.41457 0.8588107
[13,] 13 42.81855 0.8558010
[14,] 14 41.79904 0.8519100
[15,] 15 40.77126 0.8472313
[16,] 16 40.12009 0.8441580
[17,] 17 40.37614 0.8451672
[18,] 18 40.15363 0.8441116
[19,] 19 39.98977 0.8442333
[20,] 20 39.73002 0.8439681
[21,] 21 39.65428 0.8445813
[22,] 22 39.42656 0.8443677
[23,] 23 39.84529 0.8479363
[24,] 24 39.95950 0.8497601
[25,] 25 39.94764 0.8507924
[26,] 26 40.05553 0.8517916
[27,] 27 40.12196 0.8523932
[28,] 28 39.96236 0.8519969
[29,] 29 40.28441 0.8532499
[30,] 30 40.52972 0.8545108
[31,] 31 40.56262 0.8545402
[32,] 32 40.60871 0.8538094
[33,] 33 40.89219 0.8545110
[34,] 34 41.26412 0.8558072
[35,] 35 41.81069 0.8582232
[36,] 36 41.89966 0.8583139
[37,] 37 42.05074 0.8588125
[38,] 38 42.23094 0.8595823
[39,] 39 42.46423 0.8603148
[40,] 40 42.78596 0.8610829
[41,] 41 42.88812 0.8613001
[42,] 42 42.88555 0.8604740
[43,] 43 42.75305 0.8589694
[44,] 44 42.64651 0.8573131
[45,] 45 42.62604 0.8558181
[46,] 46 42.82631 0.8555338
[47,] 47 42.74501 0.8533023
[48,] 48 42.57334 0.8517093
[49,] 49 42.10557 0.8474900
[50,] 50 41.92469 0.8455960
売りのみ
通貨ペア:AUDUSD
期間:1999年1月1日~2013年11月29日
ルール①:前日終値が前日の200日移動平均線より下であれば売り。
ルール②:ポジションは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
# 200日移動平均線
ma200 <- rollapply(y,200,mean)
# 結果を記録するオブジェクト
result <- matrix(0,nrow=50,ncol=3)
colnames(result) <- c("holdday","cumret","r2")
# バックテスト
for(i in 1:50) {
holdday <- i
short <- x<ma200
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 -7.3449135 0.20737956
[2,] 2 -2.2708667 0.14349404
[3,] 3 0.9684967 0.04920556
[4,] 4 -0.7745287 0.08185575
[5,] 5 -1.6998313 0.09494707
[6,] 6 -3.0309874 0.13197333
[7,] 7 -3.3790805 0.15295599
[8,] 8 -3.9824306 0.16953742
[9,] 9 -5.1327955 0.21553391
[10,] 10 -7.1371729 0.27282974
[11,] 11 -8.8773655 0.32289476
[12,] 12 -10.1967995 0.36258118
[13,] 13 -10.7928153 0.37990338
[14,] 14 -11.8123242 0.40101623
[15,] 15 -12.8401131 0.42341953
[16,] 16 -13.4912827 0.43648219
[17,] 17 -13.2352330 0.43447238
[18,] 18 -13.4577397 0.44198388
[19,] 19 -13.6216023 0.44448153
[20,] 20 -13.8813499 0.44334100
[21,] 21 -13.9570882 0.45534405
[22,] 22 -14.1848051 0.46725869
[23,] 23 -13.7660817 0.46869555
[24,] 24 -13.6518711 0.47582389
[25,] 25 -13.6637270 0.48528255
[26,] 26 -13.5558348 0.48685876
[27,] 27 -13.4894038 0.49254395
[28,] 28 -13.6490136 0.49914308
[29,] 29 -13.3269554 0.49278110
[30,] 30 -13.0816468 0.48824896
[31,] 31 -13.0487494 0.48950167
[32,] 32 -13.0026632 0.49210744
[33,] 33 -12.7191824 0.49104701
[34,] 34 -12.3472440 0.48580922
[35,] 35 -11.8006760 0.47841293
[36,] 36 -11.7117098 0.47893461
[37,] 37 -11.5606258 0.47695456
[38,] 38 -11.3804303 0.47331215
[39,] 39 -11.1471429 0.46825490
[40,] 40 -10.8254059 0.46309327
[41,] 41 -10.7232525 0.46469709
[42,] 42 -10.7258203 0.46428815
[43,] 43 -10.8583187 0.46768533
[44,] 44 -10.9648554 0.47168695
[45,] 45 -10.9853318 0.47499853
[46,] 46 -10.7850611 0.47640088
[47,] 47 -10.8663633 0.48111027
[48,] 48 -11.0380318 0.48530476
[49,] 49 -11.5058036 0.49380287
[50,] 50 -11.6866774 0.49657469
売買両方
通貨ペア:AUDUSD
期間:1999年1月1日~2013年11月29日
ルール①:前日終値が前日の200日移動平均線以上であれば買い、前日の200日移動平均線より下であれば売り。
ルール②:ポジションは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
# 200日移動平均線
ma200 <- rollapply(y,200,mean)
# 結果を記録するオブジェクト
result <- matrix(0,nrow=50,ncol=3)
colnames(result) <- c("holdday","cumret","r2")
# バックテスト
for(i in 1:50) {
holdday <- i
long <- x>=ma200
short <- x<ma200
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 38.92154 0.6446054
[2,] 2 49.06964 0.7172066
[3,] 3 55.54836 0.7784085
[4,] 4 52.06231 0.7673422
[5,] 5 50.21171 0.7691675
[6,] 6 47.54939 0.7628065
[7,] 7 46.85321 0.7634293
[8,] 8 45.64651 0.7687890
[9,] 9 43.34578 0.7515880
[10,] 10 39.33702 0.7219762
[11,] 11 35.85664 0.6909557
[12,] 12 33.21777 0.6614422
[13,] 13 32.02574 0.6435106
[14,] 14 29.98672 0.6205646
[15,] 15 27.93114 0.5935523
[16,] 16 26.62880 0.5770466
[17,] 17 27.14090 0.5832565
[18,] 18 26.69589 0.5755561
[19,] 19 26.36816 0.5722464
[20,] 20 25.84867 0.5717444
[21,] 21 25.69719 0.5726686
[22,] 22 25.24176 0.5690862
[23,] 23 26.07921 0.5877085
[24,] 24 26.30763 0.5955614
[25,] 25 26.28391 0.5953677
[26,] 26 26.49970 0.5993719
[27,] 27 26.63256 0.5998265
[28,] 28 26.31334 0.5973317
[29,] 29 26.95746 0.6030062
[30,] 30 27.44808 0.6077031
[31,] 31 27.51387 0.6030577
[32,] 32 27.60604 0.5949786
[33,] 33 28.17300 0.5948808
[34,] 34 28.91688 0.5988162
[35,] 35 30.01002 0.6089246
[36,] 36 30.18795 0.6065621
[37,] 37 30.49012 0.6076023
[38,] 38 30.85051 0.6099892
[39,] 39 31.31708 0.6118723
[40,] 40 31.96056 0.6142782
[41,] 41 32.16486 0.6163876
[42,] 42 32.15973 0.6108724
[43,] 43 31.89473 0.6004351
[44,] 44 31.68166 0.5879981
[45,] 45 31.64071 0.5783072
[46,] 46 32.04125 0.5747542
[47,] 47 31.87864 0.5609117
[48,] 48 31.53531 0.5526316
[49,] 49 30.59976 0.5278709
[50,] 50 30.23801 0.5167550
# グラフの表示
holdday <- 3
long <- x>=ma200
short <- x<ma200
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")