前回に続いて『ラリー・ウィリアムズの短期売買法【改定第2版】』に書いてあったことを自分でも確認してみました。 今回は TDW を確認しました。
環境
- Ubuntu 18.04 LTS
- Python 3.6
- Jupyter Notebook 5.2.0
- NumPy 1.14.4
- pandas 0.23.0
- matplotlib 2.2.2
TDW
市場はコイン投げとは違う--ランダムウォーク理論家のクートナー対コーエン(この勝負はコーエンの勝ち)
もしクートナーのランダムウォーク理論が正しくて、市場の動きがランダムというのならば、日々の値動きを検証してランダム性を立証することは簡単なはずだ。 まず簡単な疑問から始めよう。 「もし市場の動きがランダムならば、毎日の高値から終値を引いた値は曜日によらずほぼ同じになり、日々のトレーディングレンジの違いなど存在しないのではないか」
次の疑問は、「もし価格の動きがランダムならば、日々の値動きの絶対値は曜日にかかわらず、ほぼ同じになるのではないか」。
そして最後の疑問は、「もし価格がランダムなら、上昇傾向や下降傾向が極端に強い曜日はないのではないか」。 市場が記憶を持たないのなら、あなたがいつコイン投げをしようと、つまりいつトレードしようと、問題ではないはずである。 しかし、実際はというと、これは大いに疑問なのである。
…略
時の試練を経た真実を見ていくことにしよう。
私が検証したのは、①値幅の大きさは曜日によって違うのか、②始値から終値までの値幅は曜日によって違うのか、③日々の値動きの絶対値は曜日によって違うのか--の 3 点である。 クートナーのランダムウォーク理論が正しいとするならば、これらの質問に対する答えはすべて同じで、曜日による違いはない、となるはずである。
ラリー・ウィリアムズの短期売買法【改定第2版】 第 6 章 真理の探究
①値幅の大きさは曜日によって違うのか
ここから Jupyter Notebook のセルに入力しながら進めます。
最初に必要なモジュールを読み込みます。
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
米ドル/円のヒストリカルデータを読み込みます。
dtype = { 'time': str, 'open': float, 'high': float, 'low': float, 'close': float, 'volume': float }
names = ['time', 'open', 'high', 'low', 'close', 'volume']
df = pd.read_csv('~/Documents/data/d/USDJPY_D.csv', dtype=dtype, header=0, index_col='time', names=names, parse_dates=['time'])
df.head()
曜日ごとに高値-安値を計算しました。
# 高値-安値
s = df['high'] - df['low']
columns = ['月', '火', '水', '木', '金']
pd.DataFrame([[s[s.index.dayofweek == i].mean() / 0.01 for i in range(0, 4 + 1)]], index=['USDJPY'], columns=columns)
結果です。
USDJPY | |
---|---|
月 | 88.980157 |
火 | 95.799739 |
水 | 100.217124 |
木 | 100.605098 |
金 | 103.96 |
見やすさを考慮して Jupyter Notebook からこの記事に転載するときに行と列を入れ替えました。 米ドル/円は金曜日の値幅が大きいみたいです。 月曜日は値幅が小さいみたいです。 かなり差があるように感じました。
21 通貨ペアでも確認しました。 ユーロ/円とユーロ/米ドルだけ記載しておきます。
EURJPY | EURUSD | |
---|---|---|
月 | 136.035591 | 106.003655 |
火 | 139.516866 | 115.228590 |
水 | 136.570346 | 117.535686 |
木 | 148.466090 | 122.863529 |
金 | 143.915027 | 122.604183 |
②始値から終値までの値幅は曜日によって違うのか
曜日ごとに終値-始値を計算しました。
# 終値-始値
s = df['close'] - df['open']
pd.DataFrame([[s[s.index.dayofweek == i].mean() / 0.01 for i in range(0, 4 + 1)]], index=['USDJPY'], columns=columns)
結果です。
USDJPY | |
---|---|
月 | 0.080026 |
火 | -0.363446 |
水 | 1.093072 |
木 | 0.71634 |
金 | -0.821569 |
水曜日は上がる傾向にあるみたいです。 でもこれは pips の単位にしていますけれども、たった 1 pips しか上がっていないことになります。 平均してしまえばこんなものなのですね。
21 通貨ペアでも確認しました。 ユーロ/円とユーロ/米ドルだけ記載しておきます。
EURJPY | EURUSD | |
---|---|---|
月 | -2.361089 | -0.553264 |
火 | 1.007835 | 1.889295 |
水 | 5.415426 | 3.409412 |
木 | 3.417420 | 3.523268 |
金 | -4.282447 | -2.705229 |
③日々の値動きの絶対値は曜日によって違うのか
# 日々の値動きの絶対値
s = (df['close'] - df['open']).abs()
pd.DataFrame([[s[s.index.dayofweek == i].mean() / 0.01 for i in range(0, 4 + 1)]], index=['USDJPY'], columns=columns)
結果です。
USDJPY | |
---|---|
月 | 42.119974 |
火 | 47.362663 |
水 | 48.748235 |
木 | 48.547974 |
金 | 50.565359 |
この結果は本の中でもまったく触れられていませんでした。 始値から終値の絶対値でいいのかわかりません。 これは何を意味しているのだろう? ボラティリティだったら上で確認した高値-安値で十分そうだけれども。
21 通貨ペアでも確認しました。 ユーロ/円とユーロ/米ドルだけ記載しておきます。
EURJPY | EURUSD | |
---|---|---|
月 | 66.147012 | 50.118538 |
火 | 69.052988 | 57.637859 |
水 | 64.370479 | 59.267451 |
木 | 71.416888 | 60.479346 |
金 | 69.932979 | 63.012418 |
終わり
つまり、 TDW は大きな違いを生み、このバイアスはトレードに大いに利用できるということである。 このバイアスを利用して利益を絞り出す方法はいろいろある。 おそらくあなたの脳裏には独自の手法が浮かんでいるに違いない。 短期トレーディングではどの市場でトレードしようと、このバイアスを理解し、それをトレードに取り入れることが成功のカギを握ることは明らかである。
ラリー・ウィリアムズの短期売買法【改定第2版】 第 6 章 真理の探究
ちょっとまだこのバイアスをトレードに取り入れられそうな気がしません。 デイトレードでその日のうちに手仕舞いしようとしているからでしょうか。 でもこの本を読んでいるとたくさん TDW が出てきて、実際にこれを使って利益を上げているんだろうと感じます。 日本のデイトレーダーの方からは聞いたことがないアイデアだなあ、と思いました。 そういう今はよくわからない違いをどれだけ明確にしていけるか、っていう泥臭い作業が利益を上げ続けていけるかどうかにつながる気がしています。
Gist に Jupyter Notebook のファイルをアップロードしておきました。