HOME はこちら
さて、データの準備ができたところで、大きな壁に突き当たります。
それは、日本とアメリカの休場日をどうするか、です。
プロミスを売買するときのシグナルになるのは、前日の日付の米国市場の引値が前日比上昇か、下落かです。
日本が祝日の場合なら、祝日空けの日の朝に確定する米国市場、日付にすると「日本の祝日」の米国市場がシグナルになります。
たとえば、11月3日は文化の日で祝日。その翌日の11月4日のポジションのシグナルになるのは米国市場の「11月3日」のデータです。米国市場の11月2日のデータは、取りあえず考える必要はありません。とにかく、日本の取引所がやっている日(プロミスの株価データのある日)の前日の米国市場のデータがあれば、それでOKです。
一方、日本の取引所はやっていて、米国市場が休みのときのシグナルはどうすればいいでしょうか。
たとえば、9月6日(月)、米国市場はレイバー・デーで休場でした。ということは、日付にすると9月7日のシグナルがないことになります。
シグナルがないのであれば、対応策は2つ。ひとつは、シグナルがないのだから売買はしない、つまり、その日の値動きは「ゼロ」だったと見なす。もうひとつは、米国の休場の前日のシグナルをそのまま使うことです。
ここでは前者を採用してみます。
9月6日の例でいえば、日本の9月6日のシグナルは、米国日付9月3日(金)のデータ。シグナルがない9月7日は、米国市場の値動きはゼロとしてポジションは取らないことにします。
では、そういう処理はどうすればできるのか、というと、ここでいくつかのステップが必要になります。
具体的には次のような流れになります。
<ステップ1>
最初に、プロミスの日付と、S&P500の日付を比べて、プロミスの日付と同じ日付がS&P500にもあれば、その日付が載っている(S&P500の)行番号を、ある列に表示させる。
同じ日付がない(つまり、米国が休場)のときには、その日付より前で、その日付に最も近い日付が載っている行番号が表示されるようにする。
そうすると、プロミスの11月4日と同じ行に、S&P500の11月4日が載っている行番号が表示されます。
また、 プロミスの9月6日は、S&P500には9月6日のデータがないので、それ以前で一番近い9月3日が載っている行番号が表示されます。これによって、9月3日の行番号が2つ続く格好になります。
<ステップ2>
今度は、プロミスの日付と、S&P500の日付を比べて、プロミスの日付と同じ日付がS&P500にもあるときだけ、その日付が載っている(S&P500の)行番号を、ステップ1の隣の列に表示させる。
同じ日付がない(=米国休場)の場合は、「データなし(またはエラー)」を表す「#N/A」が表示されるようにする
この場合、11月4日については、<その1>と同じ行番号が表示されますが、9月6日は「#N/A」が表示されます。
<ステップ3>
ステップ2で表示されたものが「#N/A」(データなし)ならば、ステップ1で表示された行番号をそのまま表示させる。
「#N/A」でない(つまり、同じ値のデータがある)場合には、ステップ2で表示された行番号より1つ若い行番号が表示されるようにする。
ステップ2では9月6日が「#N/A」なので、ステップ1で表示された日付(9月3日)の行番号がそのまま表示されます。これによって、米国が休場の日の行番号は「休場の前日の 行番号」と同じになります。
また、11月4日のところは、「#N/A」ではないので、「(S&P500の)11月4日の1つ前の行番号」、つまり、11月3日が載っている行番号が表示されます。これで、「シグナルにするS&P500日付」は、プロミスの日付よりも1日前のものになります。
<ステップ4>
ステップ3で表示された行番号のところにあるS&P500の日付そのものと、その日付の引値そのものを表示させる。
これでプロミスの日付と、シグナルにするS&P500の日付および引値が同じ行に表示されるに至ります。
「表示されるに至ります」と言っても、どうやれば表示できるのか。いかにも面倒くさそうです。が、実は、各ステップとも、あっという間にできてしまいます。4ステップ合わせても、数分で表示されるに至るのです。