2019年1月21日月曜日

通貨間の相関

5年ぶりに各通貨間の相関を調べてみたので備忘録も兼ねて。
分析に使ったファイルはこちら

目的:
「ドル円とユロドルの相関」といった通貨ペア間の相関ではなく、「ドルと円の相関」といった通貨間の相関を調べる。これにより、正の相関または負の相関が強い通貨を特定し、トレードする通貨ペアを決める際の参考にしたり、ロットを調整してリスクの取り過ぎを避けたりするのが目的。

使用データ:
Tradeview forex ライブ口座の2019年1月19日時点での、USDNZDを含む主要ドルスト7ペアの5分足、15分足、1時間足、4時間足、日足から生成されたku-powerデータ(USD, EUR, JPY, GBP, AUD, CAD, CHF, NZDの各通貨の値動きのようなもの)各2001本。
8通貨×5タイムフレームの、計40個のcsvファイルをエクセルにまとめて集計した。

簡単な結果:
逆相関→JPYとAUD
順相関→AUDとNZD、JPYとUSD、EURとCHF、JPYとCHF

手順と詳細な結果:
まずは各時間足・各通貨について、ku-powerデータ2001本の連続する足同士の終値の差を取り、2000個の差分データにした(※備考1、備考2 - 備考は記事の末尾に記載)。なお、実際のエクセルファイルではその差を10倍にしているが、これは他の分析での視認性をよくするためで、今回の分析の結果には影響しない。これにより、たとえば特定の足でUSDが2.4上げたが他の通貨はどうだったか、次の足でUSDが0.5下げたが他の通貨はどうだったか、というデータが取れたことになる。このデータで、各通貨間の相関を調べる。

このようにして求めた日足レベルでの相関係数は以下の表の通り










ここで相関係数の平均を見ると、-0.14 となっている。ku-powerというのはその通貨の価値を表すが、その「価値」とは、今回の分析対象の通貨の中での相対的な価値であるため、特定の足である通貨の(相対的な)価値が上昇すると、他の通貨の(相対的な)価値は下がることになり、必然的に負の相関になりやすい。なので、平均が0になるよう、表の各値に約 0.14 を加えて調整した(※備考3)。それが下の表になる。


上記は日足だったが、他のタイムフレームでの調整後データは以下の通り。
4時間足


1時間足


15分足


5分足


上記各タイムフレームの平均


なお、記事の最初の方でリンクした実際のエクセルファイルでは、2001本のデータでの分析の他、1つ下位のタイムフレームと同じ期間での分析データも載せてある(例えば、4時間足2001本に基づく相関表の他、1時間足2001本と同じ期間での4時間足データを使った相関表)。

備考1: 差分データを使わずにku-powerそのものの相関を調べるのは良くない。これはku-powerに限らず通貨ペア間の相関(USD/JPYとEUR/JPYの相関など)を調べるときにも言えることだが、本来対象とすべき1本ごとの動きを累積したものであるku-powerそのものや交換レートそのものを対象とすると、実情を反映しない相関係数になる可能性がある。たとえば、簡単に生成してみた下の2つのチャートには明らかに正の相関が見られる(というよりそうなるように作った)が、価格そのものを分析対象にして相関係数を算出すると0.09となり、ほぼ無相関という結果になってしまう。これを、差分データを対象とすると0.72となり、チャートの見た目と合う結果になる。

備考2: この分析ではku-powerを扱っているので「差」を取ったが、もしUSD/JPY、EUR/USDなどの通貨ペアを使って何らかの分析をするなら差ではなく比を取るべきだと思う。USD/JPYなどのいわゆる「価格」は、実際には「USDとJPYの交換比率」であり、比率同士を足し引きするのは何かとマズイ(例えばもともと定価の20%引きだったのが、セールで「更に今の価格の50%引き」になったらじゃあ70%引きかっていうとそうじゃない、みたいな)。ku-powerの場合は、すでに値自体が対数処理されているので、普通だったら掛け算・割り算するところを足し算・引き算で済ませることができ、扱いやすくなっている。
備考3: この調整後に出てきた数値はもはや相関係数ではなく、「それっぽい何か別のもの」である。今回の分析の目的に適うようにするため、このように処理したに過ぎない。そもそも本当に調整したほうが実情に合うのか、については、以下の単純化した例を見てみる。例えば通貨A、Bの調整前相関係数が0だとする。ここで、Aの価値のみが急騰すると、その他の通貨の相対的価値は少しずつ下がるが、無相関なBの価値は変わらない。ここで、通貨ペアA/CとB/C(Cは任意の通貨)について考えてみる。A/Cについては、「Aが急騰、Cが少し下げ」となるので大きく上昇する。B/Cについては「Bが不変、Cが少し下げ」なので、少し上昇する。したがって、デフォで弱い負の相関を示す傾向があるku-powerにおいて、そもそも調整前の相関係数が0であること自体弱い正の相関があるといえるので、このように調整をした。

2014年10月12日日曜日

大きく動いた日は高止まりしやすいか

例えば大きく上昇した日はあまり反発せずにそのまま高止まりすることが結構あるのではないか(下落についても同様)と思い、そうであれば「日足が長くなると実体の割合も高くなる」もしくは「長い陽線(陰線)の時は上ヒゲ(下ヒゲ)が短くなる」のではないかと調べてみた。

使用データは1つ前の記事と同じ。
ブローカー: FXCC
通貨ペア: USD/JPY, USD/CAD, NZD/USD, GBP/USD, GBP/JPY, EUR/USD, EUR/JPY, EUR/AUD, AUD/USD, AUD/JPY
期間: 2007.01.02~2014.10.03
タイムフレーム: 日足

本数: 2044本、ただしEUR/USDは2017本(日足データ欠損)

分析に使用したスプレッドシートはこちら

まずは「日足の長さ」と、「日足全体の長さに対する実体の長さの割合」の相関を調べてみることにした。日足が長い時には伸びきったところからあまり戻らず、従って実体の割合も高くなると予想。

全対象通貨ペアを平均し、日足の長さと実体割合の月別平均を求め、その相関係数とグラフを出してみた。
(シート名 correl)
月別の日足長さ平均と実体割合平均の相関係数とグラフ
相関係数は約0.23、弱い相関。散布図を見ると「そうかもしれないけど、たまたまじゃない?」というはっきりしない感じ。

次に、相関を見るのに平均を用いるのはやはりどうかと思うので、平均ではなく各通貨ペアで日ごとの日足そのものと実体の割合を使って相関係数を求めてみた(シートは「EURUSD1440」など、各通貨ペアのシート)。その結果、どの通貨ペアでも概ね0.25前後の弱い相関が見られた。弱いものの、今回対象のすべてのペアで見られたので、両者はまったく無関係というわけでもなさそうだ。

この中でも相関係数が最も高かったEUR/USD(約0.32)と、最も低かったEUR/AUD(約0.19)で散布図を表示させてみた。シート名: EURUSD1440_correl, EURAUD1440_correl
EUR/USDの日足の長さ(横軸)と、実体の割合(縦軸)

EUR/AUDの日足の長さ(横軸)と、実体の割合(縦軸)
※なお、見やすくするためEUR/AUDは右のほうをカットしている。1日の値幅1,000pips超えがちらほらあったので驚いた(2,000pips超えもあった)。
いずれのグラフでも、プロットの密集地帯のやや右側、つまり通常よりも日足が長いところから、実体の割合が少し高くなっているのがわかる。

なお、前回の記事で少し触れたが、今は以前と比べて値幅が小さくなっており、例えば2008年の100pipsと2014年の100pipsを同じ100pipsとして扱うのは問題がある可能性がある。そこで、横軸を単純な日足な長さではなく、次のように処理したものにも変えてみた(縦軸はすべて同じで、日足の長さに対する実体の割合)。シート名: EURUSD1440 (temp)

直近100本の過去データを基に正規分布を仮定した場合、その日の日足の長さがその分布のどこに位置するか(例: 0.93 = 上位7%の位置)


・その日の日足の長さは、直近100本の過去データの平均の何倍か(例: 0.6 = 0.6倍で、平均より短い)


直近100本の過去データを基に正規分布を仮定した場合の、その日の日足の長さのZ得点

これを更に「直近20本」でも見てみたが、同様の結果だった。いずれも結局、最初の単純な分析と同様の結果が見られた。また、逆に平均より日足が短い場合に、実体の割合も小さくなる傾向もうっすらと見える。「全然動かないような日で、ちょっと上や下に行ってみたけどまた定位置に戻って心停止」といった状況だろうか。


伸びた方向のヒゲについても見てみた。日足が長い日は、伸びたまま1日を終えるのであれば伸びた方向のヒゲ(陽線なら上ヒゲ、陰線なら下ヒゲ)の日足全体に対する割合は小さいはず、という予想。横軸は日足の長さそのものではなく、直近100本の過去データの平均の何倍かを表している。

予想通りの結果というか、先ほどの実体の長さに関する考察と矛盾しない結果になった。
ちなみに、伸びた方向と逆方向のヒゲについても見てみたが、同様の結果だった。例えば上に伸びる時は、下ヒゲもそこそこに、さっさとグイグイ上に行く、という感じだろうか。

一応、日足が長い日は、伸びた方向のヒゲは逆方向のヒゲより短くなるかどうかも見てみた(正確にはヒゲの長さそのものではなく、日足の長さに対するヒゲの割合)。
横軸が1より大きい箇所で、縦軸がマイナスの値が多ければ上記の通りといえるが・・・これは微妙。伸びた方のヒゲが~、と考えず、単純に日足長い=ヒゲ短い(=実体長い)、程度にしておいた方がいいかもしれない。

なお、最初の相関でどのペアでも同様の結果が出たので後の分析はほぼユロドルだけを見たが、もしかしたら他のペアではペア特有の結果が出るかもしれない。

2014年10月6日月曜日

日足で実体の割合の高い通貨ペアはあるか

通貨ペアによって、一方通行になりやすかったり、行ったと見せかけて結局元の水準に戻りやすかったりという違いがあるのではないかと思ったのがきっかけで、複数の通貨ペアに対し、日足の長さ、実体の長さ、日足全体における実体の割合についてデータ分析してみた。
例えば、ローソク足に対して実体の割合が小さければ、それは行ったり来たりしながら結局元の水準に戻ったケースが考えられるし、逆に実体の割合が比較的高い通貨ペアであれば、1日の中でトレンドが出やすい通貨ペアと考えられる。これらのいずれかの特徴を持つ通貨ペアが見つかれば、たとえば順張り、逆張りなど、トレードに生かせるかもしれない。
以下、この点についての分析の記録。
ちなみに、この疑問に対する結果だけを書くと、「見つからなかった」。

使用データ
ブローカー: FXCC
通貨ペア: USD/JPY, USD/CAD, NZD/USD, GBP/USD, GBP/JPY, EUR/USD, EUR/JPY, EUR/AUD, AUD/USD, AUD/JPY
期間: 2007.01.02~2014.10.03
タイムフレーム: 日足
本数: 2044本、ただしEUR/USDは2017本(日足データ欠損)

分析に使用したスプレッドシートはこちらでダウンロード可。

方法と結果
各通貨ペアの各日足に対し、「始値と終値のpips差(実体の長さ)」と「高値と安値のpips差(日足全体の長さ)」を求め、その両者に対して月別平均を求めた。それぞれのシート名は 1d_O-C、1d_H-L。
次に上記で求めた各通貨ペアの各月の日足実体長さ平均を、日足長さ平均で割り、月別の実体割合を求めた。シート名 1d_OC-HL。
それをグラフ化したのがこれ↓
日足における実体の割合の月次推移
わけがわからないよ!ということで同様の処理を今度は年別に行ってみた。シート名 1d_O-C_year, 1d_H-L_year, 1d_OC-HL_year。
それをグラフ化したのがこれ↓
日足における実体の割合の年次推移
今度はまともに見られるグラフになった。結果、今回の対象通貨ペアでは、際立って実体の割合が大きいまたは小さい通貨ペアはなかった。
一応、月別のデータで分散分析をしてみたが有意確率pが約7.9%と、微妙な結果だった(対象ペアの中で、もっとも違いがありそうな2ペアを取ってみても、「違いがあるかもしれない」程度の結果)。シート名 1d_OC-HL_anova



通貨ペア別ではなく、先ほどの年次推移グラフを全体として見てみると(一応、グラフでは黒線が平均)、2007年、2008年は実体割合が高かったがその後は0.5をやや下回る程度で推移。「昔はトレンドの出る日が多かった・・・」ということか。

なお、最初の月次推移のグラフはごちゃごちゃで意味不明だったが、直近1年の月次推移は以下のとおり(シート名 1d_OC-HL)
日足における実体の割合の月次推移(直近1年)
これでもごちゃごちゃしているが、今年9月に入って実体の割合が高くなっており、1日の中でトレンドが出ることが多くなったと言える。
※9月に入って(誰もが体感している通り)各ペアで値幅が出てきているが、このグラフの結果はそれとは別に、日足全体に対する実体の割合も高くなっていることを表している。日足の長さと実体の割合の関係についてはまた後日。

なお、実体割合を出す過程で求めた、日足の長さの年別平均と、実体の長さの年別平均のグラフも以下のとおり
(シート名:順に 1d_H-L_year, 1d_O-C_year)


日足の長さの年次推移
日足実体の長さの年次推移
「昔は値幅があって良かった・・・」という結果。また、2013年もアベノミクスで特に円ペアの値幅が著しく上昇している。



2014年10月4日土曜日

時間帯別の価格変動(5分足)

前回の記事「時間帯別の価格変動」では1時間足を使用したが、5分足でも同様のデータを取ってみた。これにより、指標による影響をある程度切り分けることができる。
データファイルのダウンロードはこちら

内容は基本的に前回の記事と同じ。主な違いは以下のとおり。
期間: 2013.12.13~2014.10.02
通貨ペア: USD/JPY, EUR/USD, EUR/JPY

また、指標の時間帯はグラフがスパイクになってしまうので、00分と30分のデータを取り除いた(Excelファイルでは「~(2)」となっているタブ)

値幅グラフ



上記のどのペアでも、サーバー時間15時ちょい過ぎから18時過ぎくらいまでが最も活発。
日本時間にすると、欧米が夏時間の期間は21時~24時、通常時間の期間は22時~翌1時。
これは欧州午後とNY午前が重なる時間帯。
また、サーバー時間9時からも活発になる。これはロンドンの7時にあたるので、思ったより早く値幅が出る印象(ロンドン9時から本格的に値幅が出ると思ってた)。


変動係数(CV)グラフ



スパイクの解釈はおいといて、サーバー時間0時~3時前までが、動く日と動かない日の落差が大きい。普段あまり動いていない時間帯だが、もしやるなら日本時間の7時頃にチャートを見てみて、動意がありそうならトレード、そうでないなら閉じる、というのもいいかもしれない。

2014年10月2日木曜日

時間帯別の価格変動

動きのある時間帯や動かない時間帯は感覚的にわかるものの、深夜でも意外と動くことがあるので実際にデータで集計してみました。
以下、詳細と結果です。
データファイルはダウンロードできます。


詳細

・通貨ペア:AUD/JPY, AUD/USD, EUR/AUD, EUR/JPY, EUR/JSD, GBP/JPY, GBP/USD, USD/JPY
・期間:2013.10.1~2014.9.30
・タイムフレーム:1時間足
・ブローカー:FXCC

上記のヒストリカルデータの各足の高値と安値のpips差(以下「値幅」)を、各時間ごとに集計して平均を求めた。
また、日ごとのばらつきを見るために変動係数も求めた(後述)。


結果


※グラフの時間はFXCCのサーバー時間(日足5本)。
日本時間との差は、通常時間(冬時間)はグラフの時刻+7時間が日本、夏時間ではグラフの時刻+6時間が日本。


※例えばどのペアでも14:00→15:00で上昇しているが、これは「14:00から15:00にかけて値幅が出てくる」という意味ではなく、「14:00からの時間足(14:00~15:00)よりも15:00からの時間足(15:00~16:00)の方が値幅がある」という意味。

※指標がよくある時間帯は平均値幅も大きくなる。

よく言われていることも含め、確認できたこと:
・東京、ロンドン、NYの各市場の開始直後は値幅が大きい。
・通貨ペアによって値幅の大きい市場は異なる(アジア通貨はアジア時間、など)
・GBP/JPY, EUR/AUD は一日を通じて値幅が大きい
・USD/JPYは欧州開始直後も東京開始直後も値幅は同じくらい
・NYクローズから欧州が始まるまではEUR/USDの値幅はほとんどない


また、日によってばらつきが出やすい時間帯を見るために、各時間帯の変動係数も求めてみた。ざっくり言って、この値が大きいほど、その時間帯は動く日と動かない日の落差が激しいと言える。

サーバー時間21:00~22:00の1時間が意外と大きかった。日本の午前3:00~4:00または4:00~5:00、「普段は動かないけれどたまに大きく動く」と言える
(追記:これ、単にFOMCがある日とない日の落差が大きいだけですね)
なお、指標が絡む時間帯は、指標のある日とない日で違いがあるので変動係数が大きい。


2014年9月10日水曜日

accela.ahkにアラート追加(あと長方形も)

faiさんAccela.ahk(またはその後続スクリプト)にアラートを追加する方法

ショートカットを追加する方法はfaiさんのサイト内で書かれていますが、アラートの追加はちょっと特殊だったのでここに書いておきます。(もしかしたらもっといい方法があるかもしれませんが、まあとりあえずこれで動いているので。。。)

次のスクリプトをAccela.ahk内の適当な所(正確には #IfWinActive で囲まれた範囲)にコピペしてください(その後「Reload this script」)。チャート内でAキーを押せばその価格にアラートが設定されます。ただし、その時のカーソル位置がインジやラインなどと被っていると失敗します。何もないチャート上でAキーを押す必要があります。

A::
   Send, {LButton}{RButton}
   PostMessage, 0x111,38205,0 ;アラート
   Send, {Esc}
   return

「A::」のAを変更すれば他の好きなキーに設定できます。
既にAキーが他のショートカットに使われている場合は、それを削除するか、行頭にセミコロン「;」を付けて無効化してください。
たとえばAccela.ahkであれば、元々Aキーは「A::Send !a」で使われているので、

;A::Send !a

とすればその行はコメントとみなされて無効になります。

一応、動作説明・・・左クリック→右クリック→アラートのコマンド送信→Escキー、という動作をします。
どうやらアラートはチャート上を右クリックしてコンテクストメニューを表示させた状態じゃないと出ないっぽいのでまずは右クリック、としたいところですが、例えば十字線を表示させている状態で右クリックしてもその十字線が消えるだけでメニューが表示されないので、まずは左クリックでそれをキャンセルし、その後右クリック。最後はEscキーでメニュー表示を消しています。

おまけ:
私は注目箇所に印を付けるのに長方形もよく使うので、ついでにそれも書いておきます。Rキーで長方形を描けます。

R::PostMessage, 0x111,33247,0 ;長方形

2014年6月15日日曜日

逆張りは有利か

上でも下でも、突然にゅっと伸びた足が出現した時、その次の足も引き続き伸びることもそりゃあるけれど、結構次の足は逆方向に行くんじゃないかと思って調べてみた結果の記録。
実際には各通貨のKu-Powerに対して去年調べたのだけれど、今回はいくつかの通貨ペアを対象に。

具体的には、伸びた足が出現した時、その次の足の始値で逆張りエントリーして、その足の終値で決済。もしくは、終値で決済せず、エントリールールだけで途転を繰り返す(=今ポジを持っている方向に伸びる足が出たら、その次の足の始値で現ポジを決済して途転)。


詳細

「伸びた足」かどうかの判断
過去100本の足の各「終値ー始値」が正規分布しているとみなし、現在の足の実体の長さがある一定の確率以下でしか出現しないほど長いかどうかで判断。たとえば、長さ10pipsの陽線が出た時、過去100本の足の長さの分布からしてその確率(長さ10pips以上の陽線が出る確率)が0.15だったとすると、エントリー基準となる確率を0.2以下としていた場合は次の足でショートエントリー。エントリー基準となる確率を0.1以下としていた場合は見送り。
エクセルの関数的には normdist(<現在の足>, <過去100本の平均>, <過去100本の標準偏差>)で確率判断。

注: 終値-始値
作業を簡単にするため、実際には隣り合う足の始値どうしの差。週超えの窓の影響を受けるが、まあ誤差の範囲だと思うことにした。

使用したデータ
FXCC 2014.06.14時点
eur/aud, eur/usd, eur/jpy, gbp/jpy, usd/jpy
15m, 1h, 4h各2001本ずつ

決済方法 - 2通り
1.エントリーした足の次の足の始値で決済。
2. 次の逆方向のエントリーサインが出るまで放置。逆方向のエントリーサインが出た場合は途転エントリー。

スプレッド: ひとまず考慮しない


結果

たぶん使えない程度には有利。
5ペア×3タイムフレーム×2決済方法×任意のエントリー基準(確率0~0.5)の組み合わせ方があるが、プラスになっている事の方が多い。確率0.25あたりが比較的好成績。4回に1回くらいはありそうな長さの足が出たら次の足で逆張りするのが有利、ということになる。確率にどの値を入れても大抵ちょいプラスになる。・・・が、しかし1回のエントリーあたり平均獲得pipsからスプレッドを差し引くと、これ単体では実用的ではない。というよりスプレッド引いたらマイナスになるんじゃないかという程度。組み合わせによっては好成績のものもあるけれど、単なるカーブフィッティングくさい。
決済パターン2に関しては、確率0.01とか低確率の場合で好成績が見られたりしたけれど、低確率のパターン2はリスク高すぎる。別のパターンの決済方法や、もしくはより詳細に分析すれば通貨ペアの癖が見つかるかもしれない。

使用したファイルはこちら
https://drive.google.com/file/d/0B8eOl0Vg69lRVmRmMlozS0lZbUk/edit?usp=sharing
(左上のファイル→ダウンロード)
「all」タブの「片側確率=」の右のセル(B2)に0~0.5の値を入力。ここで入力した確率以下でしか現れないような長さの足が出たときにエントリー。
「15m-1」は15分足・決済パターン1の意味。
「all」タブ以外は計算用なので基本使いません。