焼きサバ

天才天災大癲八宝菜!

MACDとシグナル線のクロスだけをみて為替レート変動のトレンド転換をとらえることは可能なのか?

どうも、最近FXをはじめました。累計損益はほぼ0で、まあ難しいなあって感じです。
さて、今回は雑にですが、MACDによる為替変動のトレンド転換が掴めるのか(トレンドを掴む、というのが具体的に何を示すのか微妙なところですが、ちょっと長い目で見て上がる・下がるがおおよそわかる、ぐらいの意味だと思ってください)を調べていきたいと思います。(数式はほぼなし)
アメリカドル/円の動きだけを見ます。

そもそもMACDとはなんぞや?って話ですが、がたがた動く為替レートの指数移動平均(EMA)に対し、短期EMA - 長期EMA のことを、MACDラインと呼びます。MACDとは、このMACDラインを利用した分析のことを表しますが、めんどくさいのでこれ以降はMACDラインのことを単にMACDと呼びます。
じゃあ指数移動平均とはなんぞや?って話ですが、これは単純な移動平均(例えば10日分のデータがあるなら、日平均として、単に総和を10で割った値を使う)とは少し異なり、直近のデータの方をより強く考慮してつくった平均になります。もちろん指数移動平均の方が単純な移動平均よりも現実のデータへのあてはまりは良くなります。また、短期の指数移動平均の方が長期の指数移動平均よりも側近のデータをよく考慮しているので、短期移動平均の方が現実データへのあてはまりは良くなります。

MACDをつかった分析には、シグナル線というものが出てきます。シグナル線とは、MACDのEMAになります。

さて、MACDとシグナル線について、シグナル線はMACDのEMAなわけですから、MACDと比べると、ややゆるやかな動き方をするのはすぐにわかると思います。
この緩やかに動くシグナル線に対し、MACDがずっと「下」にあり、途中でMACDがシグナル線と交差し、その上下関係が入れ替わるとき、
に、「買い」のサインである、というのが定説みたいです。(売りはその逆)


上述の方法で、本当に為替レート変動のトレンド転換が掴めるのでしょうか?

まず「買い」サインを検証します。
「買い」サインということはつまり下降から上昇に転換するわけですが、もう少し具体的な値を設定します。

[設定]
買いサインの条件
・直近の足「10本分」はMACDがシグナル線よりも「下」にある。
MACDがシグナル線を下から「上」へ突き抜ける。
トレンドが転換し、上昇したと判定する条件
・買いサイン後、足「4本」後の終値がたしかに上昇していること。

売りサインは上の条件のちょうど逆になるように決めます。


以上を前提に分析します。
トレンドが"転換"して上昇した!とは言っていますが、結局のところ上がってくれれば何だって良いので、上昇したと判定する基準に、直前のレート変動は考慮しないことにします。

《ここからガバガバ》


まず昔過ぎるデータはやめとくことにしましょう。日々変動するデータが従う構造というのもまた、日々わずかながらに変わっているはずであり、何年も前の変動を分析したところで今このときにそれが役に立つとは思えないからです。
じゃあどれくらい昔から取るのか、というと、まあトランプ大統領が就任してから1年後くらいにしときましょう。2018年2月14日からのデータを利用します。
今回は30分・60分・2時間・4時間・8時間 ごとのデータを使います。
一番下で私のくそみたいなソースコードを公開していますが、この"USDJPY.csv"というファイルは、

以下のサイト
forextester.jp
からもってきました。ありがたい限りです。

短期EMA、長期EMA、シグナル線は、パラメータの値がそれぞれ12,26,9でだいたい決まってる(どこみてもこの数値でした)のでそれを使います。
あとはだらだら計算して、「買いサイン」のあと、「実際に上昇したか」を確認しました。
USDJPY.時間.checkというのはベクトル型のデータで、1か0が入っています。
1なら、「買いサイン」のあと実際に「上昇」していて、0なら「上昇」しなかった、ことを表しています。

Rのコード

> #帰無仮説 MACDにはトレンド把握能力が完全にない
> length(USDJPY.8HOUR.check)  
[1] 31
> sum(USDJPY.8HOUR.check)
[1] 16
> pbinom(sum(USDJPY.8HOUR.check),length(USDJPY.8HOUR.check),0.5)
[1] 0.6399499
> 
> length(USDJPY.4HOUR.check)  
[1] 56
> sum(USDJPY.4HOUR.check)
[1] 29
> pbinom(sum(USDJPY.4HOUR.check),length(USDJPY.4HOUR.check),0.5)
[1] 0.6555601
> 
> length(USDJPY.2HOUR.check)  
[1] 114
> sum(USDJPY.2HOUR.check)
[1] 51
> pbinom(sum(USDJPY.2HOUR.check),length(USDJPY.2HOUR.check),0.5)
[1] 0.1514388
> 
> length(USDJPY.60MIN.check)  
[1] 217
> sum(USDJPY.60MIN.check)
[1] 123
> pbinom(sum(USDJPY.60MIN.check),length(USDJPY.60MIN.check),0.5)
[1] 0.9792754
> 
> length(USDJPY.30MIN.check)  
[1] 448
> sum(USDJPY.30MIN.check)
[1] 208
> pbinom(sum(USDJPY.30MIN.check),length(USDJPY.30MIN.check),0.5)
[1] 0.07147081

pbinom(m,n,p) というのは、成功確率p、繰り返し数nの成功回数がm「以下」である確率(つまり分布関数の値ですね)を表します。これを見ると、有意水準5%で明確に「買いサイン」として機能しているのは60分足の場合だけでした。
それどころか、2時間足、30分足で見てみると「上昇」してくれなかった(つまり逆に下がった)場合が、完全にランダムに上昇・下降を予想した場合よりも多そうだと考えられそうです。つまり、2時間足、30分足では、「買いサイン」をみて足4本分ボケっと待っていると、「買いサイン」を見ないで適当に売買しているよりもなお悪くなる可能性がありそうだ、ということです。



同様に、「売りサイン」のあと、「実際に下降したか」を確認しました。
USDJPY.時間.checkというのはベクトル型のデータで、1か0が入っています。
1なら、「売りサイン」のあと実際に「下降」していて、0なら「下降」しなかった、ことを表しています。

> #帰無仮説 MACDにはトレンド把握能力が完全にない
> length(USDJPY.8HOUR.check)  
[1] 32
> sum(USDJPY.8HOUR.check)
[1] 15
> pbinom(sum(USDJPY.8HOUR.check),length(USDJPY.8HOUR.check),0.5)
[1] 0.430025
> 
> length(USDJPY.4HOUR.check)  
[1] 50
> sum(USDJPY.4HOUR.check)
[1] 24
> pbinom(sum(USDJPY.4HOUR.check),length(USDJPY.4HOUR.check),0.5)
[1] 0.4438624
> 
> length(USDJPY.2HOUR.check)  
[1] 114
> sum(USDJPY.2HOUR.check)
[1] 56
> pbinom(sum(USDJPY.2HOUR.check),length(USDJPY.2HOUR.check),0.5)
[1] 0.4627175
> 
> length(USDJPY.60MIN.check)  
[1] 225
> sum(USDJPY.60MIN.check)
[1] 95
> pbinom(sum(USDJPY.60MIN.check),length(USDJPY.60MIN.check),0.5)
[1] 0.01159875
> 
> length(USDJPY.30MIN.check)  
[1] 431
> sum(USDJPY.30MIN.check)
[1] 200
> pbinom(sum(USDJPY.30MIN.check),length(USDJPY.30MIN.check),0.5)
[1] 0.07417939

「買いサイン」とは結果が異なりました。まずどの時間足で見ても、「売りサイン」は有意に機能していません。それどころか、60分足で「売りサイン」を信じて売りに入れば、(期待値的には)損失になってしまうことが有意に示されています。


ここ最近はUSD/JPYが超長期で見て上昇傾向にあるっぽいので、それが関係しているかもしれませんね。


《注意》
多重比較の問題を考えると、一般にMACDが「買いサイン」「売りサイン」として、機能する・しないを論じるにはまた別の検定が必要になります。今までの検証はあくまでも、各々の足においてMACDが機能するかしないかのみを考えており、例えば"複数の足におけるMACDを総合的に鑑みて買い・売りを決めるにはこうすれば良い!"などのことは一切論じていません。



以下、今回使用したRのコード。

USDJPY<-read.csv("USDJPY.csv")
##前処理-----------------------------------

##2018/02/14日以降のデータを使う
USDJPY20180214<-USDJPY[USDJPY$X.DTYYYYMMDD.>=20180214,]
##分ごと時間ごとデータをつくる
USDJPY20180214.30MIN<-USDJPY20180214[(USDJPY20180214$X.TIME.%%10000)%%30==0,]
USDJPY20180214.30MIN<-USDJPY20180214[(USDJPY20180214$X.TIME.%%10000)%%3000==0,]
USDJPY20180214.60MIN<-USDJPY20180214[USDJPY20180214$X.TIME.%%10000==0,]
USDJPY20180214.2HOUR<-USDJPY20180214[USDJPY20180214$X.TIME.%%20000==0,]
USDJPY20180214.4HOUR<-USDJPY20180214[USDJPY20180214$X.TIME.%%40000==0,]
USDJPY20180214.8HOUR<-USDJPY20180214[USDJPY20180214$X.TIME.%%80000==0,]



#MACD=短期EMA-長期EMA

##短期EMAの計算  n=12---------
USDJPY20180214.8HOUR$EMA.S<-0
USDJPY20180214.8HOUR$EMA.S[12]<-mean(USDJPY20180214.8HOUR$X.CLOSE.[1:24])
for(i in 13:length(USDJPY20180214.8HOUR$X.CLOSE.)){
  USDJPY20180214.8HOUR$EMA.S[i]<-
    USDJPY20180214.8HOUR$EMA.S[i-1]+(2/13)*(
      USDJPY20180214.8HOUR$X.CLOSE.[i]-USDJPY20180214.8HOUR$EMA.S[i-1])
}

USDJPY20180214.4HOUR$EMA.S<-0
USDJPY20180214.4HOUR$EMA.S[12]<-mean(USDJPY20180214.4HOUR$X.CLOSE.[1:24])
for(i in 13:length(USDJPY20180214.4HOUR$X.CLOSE.)){
  USDJPY20180214.4HOUR$EMA.S[i]<-
    USDJPY20180214.4HOUR$EMA.S[i-1]+(2/13)*(
      USDJPY20180214.4HOUR$X.CLOSE.[i]-USDJPY20180214.4HOUR$EMA.S[i-1])
}

USDJPY20180214.2HOUR$EMA.S<-0
USDJPY20180214.2HOUR$EMA.S[12]<-mean(USDJPY20180214.2HOUR$X.CLOSE.[1:24])
for(i in 13:length(USDJPY20180214.2HOUR$X.CLOSE.)){
  USDJPY20180214.2HOUR$EMA.S[i]<-
    USDJPY20180214.2HOUR$EMA.S[i-1]+(2/13)*(
      USDJPY20180214.2HOUR$X.CLOSE.[i]-USDJPY20180214.2HOUR$EMA.S[i-1])
}

USDJPY20180214.60MIN$EMA.S<-0
USDJPY20180214.60MIN$EMA.S[12]<-mean(USDJPY20180214.60MIN$X.CLOSE.[1:24])
for(i in 13:length(USDJPY20180214.60MIN$X.CLOSE.)){
  USDJPY20180214.60MIN$EMA.S[i]<-
    USDJPY20180214.60MIN$EMA.S[i-1]+(2/13)*(
      USDJPY20180214.60MIN$X.CLOSE.[i]-USDJPY20180214.60MIN$EMA.S[i-1])
}

USDJPY20180214.30MIN$EMA.S<-0
USDJPY20180214.30MIN$EMA.S[12]<-mean(USDJPY20180214.30MIN$X.CLOSE.[1:24])
for(i in 13:length(USDJPY20180214.30MIN$X.CLOSE.)){
  USDJPY20180214.30MIN$EMA.S[i]<-
    USDJPY20180214.30MIN$EMA.S[i-1]+(2/13)*(
      USDJPY20180214.30MIN$X.CLOSE.[i]-USDJPY20180214.30MIN$EMA.S[i-1])
}



##長期EMAの計算 n=26-----------
USDJPY20180214.8HOUR$EMA.L<-0
USDJPY20180214.8HOUR$EMA.L[26]<-mean(USDJPY20180214.8HOUR$X.CLOSE.[1:26])
for(i in 27:length(USDJPY20180214.8HOUR$X.CLOSE.)){
  USDJPY20180214.8HOUR$EMA.L[i]<-
    USDJPY20180214.8HOUR$EMA.L[i-1]+(2/27)*(
      USDJPY20180214.8HOUR$X.CLOSE.[i]-USDJPY20180214.8HOUR$EMA.L[i-1])
}

USDJPY20180214.4HOUR$EMA.L<-0
USDJPY20180214.4HOUR$EMA.L[26]<-mean(USDJPY20180214.4HOUR$X.CLOSE.[1:26])
for(i in 27:length(USDJPY20180214.4HOUR$X.CLOSE.)){
  USDJPY20180214.4HOUR$EMA.L[i]<-
    USDJPY20180214.4HOUR$EMA.L[i-1]+(2/27)*(
      USDJPY20180214.4HOUR$X.CLOSE.[i]-USDJPY20180214.4HOUR$EMA.L[i-1])
}

USDJPY20180214.2HOUR$EMA.L<-0
USDJPY20180214.2HOUR$EMA.L[26]<-mean(USDJPY20180214.2HOUR$X.CLOSE.[1:26])
for(i in 27:length(USDJPY20180214.2HOUR$X.CLOSE.)){
  USDJPY20180214.2HOUR$EMA.L[i]<-
    USDJPY20180214.2HOUR$EMA.L[i-1]+(2/27)*(
      USDJPY20180214.2HOUR$X.CLOSE.[i]-USDJPY20180214.2HOUR$EMA.L[i-1])
}

USDJPY20180214.60MIN$EMA.L<-0
USDJPY20180214.60MIN$EMA.L[26]<-mean(USDJPY20180214.60MIN$X.CLOSE.[1:26])
for(i in 27:length(USDJPY20180214.60MIN$X.CLOSE.)){
  USDJPY20180214.60MIN$EMA.L[i]<-
    USDJPY20180214.60MIN$EMA.L[i-1]+(2/27)*(
      USDJPY20180214.60MIN$X.CLOSE.[i]-USDJPY20180214.60MIN$EMA.L[i-1])
}

USDJPY20180214.30MIN$EMA.L<-0
USDJPY20180214.30MIN$EMA.L[26]<-mean(USDJPY20180214.30MIN$X.CLOSE.[1:26])
for(i in 27:length(USDJPY20180214.30MIN$X.CLOSE.)){
  USDJPY20180214.30MIN$EMA.L[i]<-
    USDJPY20180214.30MIN$EMA.L[i-1]+(2/27)*(
      USDJPY20180214.30MIN$X.CLOSE.[i]-USDJPY20180214.30MIN$EMA.L[i-1])
}



##MACDの計算----------------
USDJPY20180214.8HOUR$MACD<-0
for(i in 27:length(USDJPY20180214.8HOUR$X.CLOSE.)){
USDJPY20180214.8HOUR$MACD[i]<-USDJPY20180214.8HOUR$EMA.S[i]-USDJPY20180214.8HOUR$EMA.L[i]
}

USDJPY20180214.4HOUR$MACD<-0
for(i in 27:length(USDJPY20180214.4HOUR$X.CLOSE.)){
  USDJPY20180214.4HOUR$MACD[i]<-USDJPY20180214.4HOUR$EMA.S[i]-USDJPY20180214.4HOUR$EMA.L[i]
}

USDJPY20180214.2HOUR$MACD<-0
for(i in 27:length(USDJPY20180214.2HOUR$X.CLOSE.)){
  USDJPY20180214.2HOUR$MACD[i]<-USDJPY20180214.2HOUR$EMA.S[i]-USDJPY20180214.2HOUR$EMA.L[i]
}

USDJPY20180214.60MIN$MACD<-0
for(i in 27:length(USDJPY20180214.60MIN$X.CLOSE.)){
  USDJPY20180214.60MIN$MACD[i]<-USDJPY20180214.60MIN$EMA.S[i]-USDJPY20180214.60MIN$EMA.L[i]
}

USDJPY20180214.30MIN$MACD<-0
for(i in 27:length(USDJPY20180214.30MIN$X.CLOSE.)){
  USDJPY20180214.30MIN$MACD[i]<-USDJPY20180214.30MIN$EMA.S[i]-USDJPY20180214.30MIN$EMA.L[i]
}

##シグナル線の計算------------
#MACDのEMA  n=9
USDJPY20180214.8HOUR$signal<-0
USDJPY20180214.8HOUR$signal[9]<-mean(USDJPY20180214.8HOUR$MACD[1:9])
for(i in 10:length(USDJPY20180214.8HOUR$X.CLOSE.)){
  USDJPY20180214.8HOUR$signal[i]<-
    USDJPY20180214.8HOUR$signal[i-1]+(2/10)*(
      USDJPY20180214.8HOUR$MACD[i]-USDJPY20180214.8HOUR$signal[i-1]
    )
}

USDJPY20180214.4HOUR$signal<-0
USDJPY20180214.4HOUR$signal[9]<-mean(USDJPY20180214.4HOUR$MACD[1:9])
for(i in 10:length(USDJPY20180214.4HOUR$X.CLOSE.)){
  USDJPY20180214.4HOUR$signal[i]<-
    USDJPY20180214.4HOUR$signal[i-1]+(2/10)*(
      USDJPY20180214.4HOUR$MACD[i]-USDJPY20180214.4HOUR$signal[i-1]
    )
}

USDJPY20180214.2HOUR$signal<-0
USDJPY20180214.2HOUR$signal[9]<-mean(USDJPY20180214.2HOUR$MACD[1:9])
for(i in 10:length(USDJPY20180214.2HOUR$X.CLOSE.)){
  USDJPY20180214.2HOUR$signal[i]<-
    USDJPY20180214.2HOUR$signal[i-1]+(2/10)*(
      USDJPY20180214.2HOUR$MACD[i]-USDJPY20180214.2HOUR$signal[i-1]
    )
}

USDJPY20180214.60MIN$signal<-0
USDJPY20180214.60MIN$signal[9]<-mean(USDJPY20180214.60MIN$MACD[1:9])
for(i in 10:length(USDJPY20180214.60MIN$X.CLOSE.)){
  USDJPY20180214.60MIN$signal[i]<-
    USDJPY20180214.60MIN$signal[i-1]+(2/10)*(
      USDJPY20180214.60MIN$MACD[i]-USDJPY20180214.60MIN$signal[i-1]
    )
}

USDJPY20180214.30MIN$signal<-0
USDJPY20180214.30MIN$signal[9]<-mean(USDJPY20180214.30MIN$MACD[1:9])
for(i in 10:length(USDJPY20180214.30MIN$X.CLOSE.)){
  USDJPY20180214.30MIN$signal[i]<-
    USDJPY20180214.30MIN$signal[i-1]+(2/10)*(
      USDJPY20180214.30MIN$MACD[i]-USDJPY20180214.30MIN$signal[i-1]
    )
}



##最初の方切り捨て----------------
USDJPY.8HOUR<-USDJPY20180214.8HOUR[USDJPY20180214.8HOUR$X.DTYYYYMMDD.>=20180227,]
USDJPY.4HOUR<-USDJPY20180214.4HOUR[USDJPY20180214.4HOUR$X.DTYYYYMMDD.>=20180227,]
USDJPY.2HOUR<-USDJPY20180214.2HOUR[USDJPY20180214.2HOUR$X.DTYYYYMMDD.>=20180227,]
USDJPY.60MIN<-USDJPY20180214.60MIN[USDJPY20180214.60MIN$X.DTYYYYMMDD.>=20180227,]
USDJPY.30MIN<-USDJPY20180214.30MIN[USDJPY20180214.30MIN$X.DTYYYYMMDD.>=20180227,]



##買いタイミングの検出---------------
#前10期が、シグナル線がMACDよりも上にあり、今期にてそれらが交差したとき、買いタイミングとする
USDJPY.8HOUR$LONG<-0
for(i in 11:length(USDJPY.8HOUR$X.CLOSE.)){
  FLAG<-rep(0,10)
    if (((USDJPY.8HOUR$MACD[i-1]-USDJPY.8HOUR$signal[i-1])*
        (USDJPY.8HOUR$MACD[i]-USDJPY.8HOUR$signal[i]) <0) ){
     for(j in 10:1){FLAG[j]<-((USDJPY.8HOUR$signal[i-j]-USDJPY.8HOUR$MACD[i-j])>0)}
     if(prod(FLAG)==1){ USDJPY.8HOUR$LONG[i]<-1}
    }
}

USDJPY.4HOUR$LONG<-0
for(i in 11:length(USDJPY.4HOUR$X.CLOSE.)){
  FLAG<-rep(0,10)
    if (((USDJPY.4HOUR$MACD[i-1]-USDJPY.4HOUR$signal[i-1])*
         (USDJPY.4HOUR$MACD[i]-USDJPY.4HOUR$signal[i]) <0) ){
      for(j in 10:1){FLAG[j]<-(USDJPY.4HOUR$signal[i-j]-(USDJPY.4HOUR$MACD[i-j])>0)}
      if(prod(FLAG)==1){ USDJPY.4HOUR$LONG[i]<-1}
    }
}

USDJPY.2HOUR$LONG<-0
for(i in 11:length(USDJPY.2HOUR$X.CLOSE.)){
  FLAG<-rep(0,10)
    if (((USDJPY.2HOUR$MACD[i-1]-USDJPY.2HOUR$signal[i-1])*
         (USDJPY.2HOUR$MACD[i]-USDJPY.2HOUR$signal[i]) <0) ){
      for(j in 10:1){FLAG[j]<-((USDJPY.2HOUR$signal[i-j]-USDJPY.2HOUR$MACD[i-j])>0)}
      if(prod(FLAG)==1){ USDJPY.2HOUR$LONG[i]<-1}
    }
}

USDJPY.60MIN$LONG<-0
for(i in 11:length(USDJPY.60MIN$X.CLOSE.)){
  FLAG<-rep(0,10)
    if (((USDJPY.60MIN$MACD[i-1]-USDJPY.60MIN$signal[i-1])*
         (USDJPY.60MIN$MACD[i]-USDJPY.60MIN$signal[i]) <0) ){
      for(j in 10:1){FLAG[j]<-((USDJPY.60MIN$signal[i-j]-USDJPY.60MIN$MACD[i-j])>0)}
      if(prod(FLAG)==1){ USDJPY.60MIN$LONG[i]<-1}
    }
}

USDJPY.30MIN$LONG<-0
for(i in 11:length(USDJPY.30MIN$X.CLOSE.)){
  FLAG<-rep(0,10)
    if (((USDJPY.30MIN$MACD[i-1]-USDJPY.30MIN$signal[i-1])*
         (USDJPY.30MIN$MACD[i]-USDJPY.30MIN$signal[i]) <0) ){
      for(j in 10:1){FLAG[j]<-((USDJPY.30MIN$signal[i-j]-USDJPY.30MIN$MACD[i-j])>0)}
      if(prod(FLAG)==1){ USDJPY.30MIN$LONG[i]<-1}
    }
}


##買いタイミングの検証----------
USDJPY.8HOUR$LONG.check<-0
for(i in 1:( length(USDJPY.8HOUR$LONG) -5)){
  if(USDJPY.8HOUR$LONG[i]==1){
    if((USDJPY.8HOUR$X.CLOSE.[i+5]-USDJPY.8HOUR$X.CLOSE.[i])>0){
      USDJPY.8HOUR$LONG.check[i]<-1
    }
  }
}

USDJPY.4HOUR$LONG.check<-0
for(i in 1:(length(USDJPY.4HOUR$LONG)-5)){
  if(USDJPY.4HOUR$LONG[i]==1){
    if((USDJPY.4HOUR$X.CLOSE.[i+5]-USDJPY.4HOUR$X.CLOSE.[i])>0){
      USDJPY.4HOUR$LONG.check[i]<-1
    }
  }
}

USDJPY.2HOUR$LONG.check<-0
for(i in 1:(length(USDJPY.2HOUR$LONG)-5)){
  if(USDJPY.2HOUR$LONG[i]==1){
    if((USDJPY.2HOUR$X.CLOSE.[i+5]-USDJPY.2HOUR$X.CLOSE.[i])>0){
      USDJPY.2HOUR$LONG.check[i]<-1
    }
  }
}

USDJPY.60MIN$LONG.check<-0
for(i in 1:(length(USDJPY.60MIN$LONG)-5)){
  if(USDJPY.60MIN$LONG[i]==1){
    if((USDJPY.60MIN$X.CLOSE.[i+5]-USDJPY.60MIN$X.CLOSE.[i])>0){
      USDJPY.60MIN$LONG.check[i]<-1
    }
  }
}

USDJPY.30MIN$LONG.check<-0
for(i in 1:(length(USDJPY.30MIN$LONG)-5)){
  if(USDJPY.30MIN$LONG[i]==1){
    if((USDJPY.30MIN$X.CLOSE.[i+5]-USDJPY.30MIN$X.CLOSE.[i])>0){
      USDJPY.30MIN$LONG.check[i]<-1
    }
  }
}


##仮説検定-----------
USDJPY.8HOUR.check<-USDJPY.8HOUR[USDJPY.8HOUR$LONG==1,14]
USDJPY.4HOUR.check<-USDJPY.4HOUR[USDJPY.4HOUR$LONG==1,14]
USDJPY.2HOUR.check<-USDJPY.2HOUR[USDJPY.2HOUR$LONG==1,14]
USDJPY.60MIN.check<-USDJPY.60MIN[USDJPY.60MIN$LONG==1,14]
USDJPY.30MIN.check<-USDJPY.30MIN[USDJPY.30MIN$LONG==1,14]

#帰無仮説 MACDにはトレンド把握能力が完全にない
length(USDJPY.8HOUR.check)  
sum(USDJPY.8HOUR.check)
pbinom(sum(USDJPY.8HOUR.check),length(USDJPY.8HOUR.check),0.5)

length(USDJPY.4HOUR.check)  
sum(USDJPY.4HOUR.check)
pbinom(sum(USDJPY.4HOUR.check),length(USDJPY.4HOUR.check),0.5)

length(USDJPY.2HOUR.check)  
sum(USDJPY.2HOUR.check)
pbinom(sum(USDJPY.2HOUR.check),length(USDJPY.2HOUR.check),0.5)

length(USDJPY.60MIN.check)  
sum(USDJPY.60MIN.check)
pbinom(sum(USDJPY.60MIN.check),length(USDJPY.60MIN.check),0.5)

length(USDJPY.30MIN.check)  
sum(USDJPY.30MIN.check)
pbinom(sum(USDJPY.30MIN.check),length(USDJPY.30MIN.check),0.5)

##結論 有意水準5%で棄却されるのは60分足のみ とくに2時間・30分足はやめといた方が良い


##売りタイミングの検出----------------------
#前10期が、シグナル線がMACDよりも下にあり、今期にてそれらが交差したとき、売りタイミングとする
USDJPY.8HOUR$SHORT<-0
for(i in 11:length(USDJPY.8HOUR$X.CLOSE.)){
  FLAG<-rep(0,10)
  if (((USDJPY.8HOUR$MACD[i-1]-USDJPY.8HOUR$signal[i-1])*
       (USDJPY.8HOUR$MACD[i]-USDJPY.8HOUR$signal[i]) <0) ){
    for(j in 10:1){FLAG[j]<-((USDJPY.8HOUR$signal[i-j]-USDJPY.8HOUR$MACD[i-j])<0)}
    if(prod(FLAG)==1){ USDJPY.8HOUR$SHORT[i]<-1}
  }
}

USDJPY.4HOUR$SHORT<-0
for(i in 11:length(USDJPY.4HOUR$X.CLOSE.)){
  FLAG<-rep(0,10)
  if (((USDJPY.4HOUR$MACD[i-1]-USDJPY.4HOUR$signal[i-1])*
       (USDJPY.4HOUR$MACD[i]-USDJPY.4HOUR$signal[i]) <0) ){
    for(j in 10:1){FLAG[j]<-(USDJPY.4HOUR$signal[i-j]-(USDJPY.4HOUR$MACD[i-j])<0)}
    if(prod(FLAG)==1){ USDJPY.4HOUR$SHORT[i]<-1}
  }
}

USDJPY.2HOUR$SHORT<-0
for(i in 11:length(USDJPY.2HOUR$X.CLOSE.)){
  FLAG<-rep(0,10)
  if (((USDJPY.2HOUR$MACD[i-1]-USDJPY.2HOUR$signal[i-1])*
       (USDJPY.2HOUR$MACD[i]-USDJPY.2HOUR$signal[i]) <0) ){
    for(j in 10:1){FLAG[j]<-((USDJPY.2HOUR$signal[i-j]-USDJPY.2HOUR$MACD[i-j])<0)}
    if(prod(FLAG)==1){ USDJPY.2HOUR$SHORT[i]<-1}
  }
}

USDJPY.60MIN$SHORT<-0
for(i in 11:length(USDJPY.60MIN$X.CLOSE.)){
  FLAG<-rep(0,10)
  if (((USDJPY.60MIN$MACD[i-1]-USDJPY.60MIN$signal[i-1])*
       (USDJPY.60MIN$MACD[i]-USDJPY.60MIN$signal[i]) <0) ){
    for(j in 10:1){FLAG[j]<-((USDJPY.60MIN$signal[i-j]-USDJPY.60MIN$MACD[i-j])<0)}
    if(prod(FLAG)==1){ USDJPY.60MIN$SHORT[i]<-1}
  }
}

USDJPY.30MIN$SHORT<-0
for(i in 11:length(USDJPY.30MIN$X.CLOSE.)){
  FLAG<-rep(0,10)
  if (((USDJPY.30MIN$MACD[i-1]-USDJPY.30MIN$signal[i-1])*
       (USDJPY.30MIN$MACD[i]-USDJPY.30MIN$signal[i]) <0) ){
    for(j in 10:1){FLAG[j]<-((USDJPY.30MIN$signal[i-j]-USDJPY.30MIN$MACD[i-j])<0)}
    if(prod(FLAG)==1){ USDJPY.30MIN$SHORT[i]<-1}
  }
}


##売りタイミングの検証----------
USDJPY.8HOUR$SHORT.check<-0
for(i in 1:( length(USDJPY.8HOUR$SHORT) -4)){
  if(USDJPY.8HOUR$SHORT[i]==1){
    if((USDJPY.8HOUR$X.CLOSE.[i+4]-USDJPY.8HOUR$X.CLOSE.[i])<0){
      USDJPY.8HOUR$SHORT.check[i]<-1
    }
  }
}

USDJPY.4HOUR$SHORT.check<-0
for(i in 1:(length(USDJPY.4HOUR$SHORT)-4)){
  if(USDJPY.4HOUR$SHORT[i]==1){
    if((USDJPY.4HOUR$X.CLOSE.[i+4]-USDJPY.4HOUR$X.CLOSE.[i])<0){
      USDJPY.4HOUR$SHORT.check[i]<-1
    }
  }
}

USDJPY.2HOUR$SHORT.check<-0
for(i in 1:(length(USDJPY.2HOUR$SHORT)-5)){
  if(USDJPY.2HOUR$SHORT[i]==1){
    if((USDJPY.2HOUR$X.CLOSE.[i+4]-USDJPY.2HOUR$X.CLOSE.[i])<0){
      USDJPY.2HOUR$SHORT.check[i]<-1
    }
  }
}

USDJPY.60MIN$SHORT.check<-0
for(i in 1:(length(USDJPY.60MIN$SHORT)-4)){
  if(USDJPY.60MIN$SHORT[i]==1){
    if((USDJPY.60MIN$X.CLOSE.[i+4]-USDJPY.60MIN$X.CLOSE.[i])<0){
      USDJPY.60MIN$SHORT.check[i]<-1
    }
  }
}

USDJPY.30MIN$SHORT.check<-0
for(i in 1:(length(USDJPY.30MIN$SHORT)-4)){
  if(USDJPY.30MIN$SHORT[i]==1){
    if((USDJPY.30MIN$X.CLOSE.[i+4]-USDJPY.30MIN$X.CLOSE.[i])<0){
      USDJPY.30MIN$SHORT.check[i]<-1
    }
  }
}








##仮説検定-----------
USDJPY.8HOUR.check<-USDJPY.8HOUR[USDJPY.8HOUR$SHORT==1,16]
USDJPY.4HOUR.check<-USDJPY.4HOUR[USDJPY.4HOUR$SHORT==1,16]
USDJPY.2HOUR.check<-USDJPY.2HOUR[USDJPY.2HOUR$SHORT==1,16]
USDJPY.60MIN.check<-USDJPY.60MIN[USDJPY.60MIN$SHORT==1,16]
USDJPY.30MIN.check<-USDJPY.30MIN[USDJPY.30MIN$SHORT==1,16]

#帰無仮説 MACDにはトレンド把握能力が完全にない
length(USDJPY.8HOUR.check)  
sum(USDJPY.8HOUR.check)
pbinom(sum(USDJPY.8HOUR.check),length(USDJPY.8HOUR.check),0.5)

length(USDJPY.4HOUR.check)  
sum(USDJPY.4HOUR.check)
pbinom(sum(USDJPY.4HOUR.check),length(USDJPY.4HOUR.check),0.5)

length(USDJPY.2HOUR.check)  
sum(USDJPY.2HOUR.check)
pbinom(sum(USDJPY.2HOUR.check),length(USDJPY.2HOUR.check),0.5)

length(USDJPY.60MIN.check)  
sum(USDJPY.60MIN.check)
pbinom(sum(USDJPY.60MIN.check),length(USDJPY.60MIN.check),0.5)

length(USDJPY.30MIN.check)  
sum(USDJPY.30MIN.check)
pbinom(sum(USDJPY.30MIN.check),length(USDJPY.30MIN.check),0.5)

##結論 有意水準5%で棄却されたものはなかった。 とくに60分・30分はやめといた方が良い