トレーディング、Arts&Logic by 田中 雅

閉じる
  • 自分でトレードひまわりFX
  • 自動でトレードエコトレFX
  • FXを学ぶアカデミーチョイス
  • マーケット
    情報を知る
  • お客様サポート
お困りのことがございましたら
お気軽にお問い合わせください
0120-86-9686
受付時間 AM9時〜PM5時(土日・年末年始を除く)
閉じる
MENU

自分でトレード ひまわりFX

自動でトレード エコトレFX

FXを学ぶ アカデミーチョイス

マーケット情報

お客様サポート

閉じる

ローカルナビゲーション
  • エコトレ FX TOP
  • システムトレードの基礎知識
  • エコトレ FX 詳細
  • ポートフォリオジェネレーター
  • ループ・イフダン®

トレーディング、Arts&Logic by 田中 雅

第VII部:システム構築と評価

第3章:時間足ヒストリカル・シミュレーション(3:スプレッドとスリッページ)

2010/10/20

最適化されたトップモデルのシストレ運用実施シミュレーション

シミュレーションとは第一義的には取引戦略のロジックとその最適化パラメータを発見する事である。前章では全通貨全戦略の全幅探索によって最適化されたトレーディング・ストラテジーに到達する一つの典型的道筋を示した。なかでも両打ちに絡む問題点を詳しく取り上げて検討した。

コストのシミュレーション

もちろんこれで問題が解決したのではなく道はまだ半ば。ここで実際取引に取り掛かると片足で全力疾走を始めるようなもので倒れてしまう。先延ばしにしていた取引コストのシミュレーションという課題があり、それを済ませてから実際の超短期取引に乗り出すことになる。

ところが早速問題が発生する。戦略とパラメータであれば全幅探索によって最適解をロジックで求める事が出来るが、コストとは取られるものであり、税金と同じでそれを避ける最適解などはもともと存在しない。これが第一の問題。

コスト定量化の問題点

次に、コストと言うといかにも定量化されており、その数値をシミュレーションソフトにインプットすれば、収益に与える負の影響を計算する事など簡単に出来る、と思いがちで有る。実際全てのシミュレーションソフトには手数料やスリッページ等のコスト値を入力さえすれば、一瞬にしてどの程度の負の影響が収益に現れるのか推定出来る仕組みが備わっている。

問題はその入力数値である。どのような数値を入力すれば適性といえるのか、実は非常に推し量り難いのだ。殆どの業者がスプレッドの一覧表を公表している。最低限それをまず詳細に知る必要がある。しかしそれを知っただけで単純に問題が解決するという訳でもない事が分かってきた。コストは不確定性と言う見地からはリスクの一種なのである。これはシミュレーション成功如何の根幹に大きく関わってくる事なので、本章ではそれについて詳しく取り上げる。

コストに絡む様々な問題はFX業者ごとに固有の特徴を持っている。幾分かは企業秘密のようなものでもあり、自ら進んで開示する方針を採らない業者もある。中にはコストの透明性を最優先の営業方針として打ち出している業者も有るが、多くの場合、事前に幾ら考えても定量化しがたい未知数が多く、その業者に於ける取引実行の現場から最適解を推測するような道筋を辿るのが唯一の突破口である。

では早速、出来上がったトレーディングシステムをひまわりFXのシストレ口座デモに接続して仮想売買をおこなうと、一体どういう問題が浮上してくるのか、実際にシミュレーションしながら一つ一つ解決していく事にしよう。

システムとシストレ口座との接続後、ポジション同期の問題

シストレ口座を開くと、次にトレードシグナルをシストレ口座に接続する。接続自体は難しくない。さて、この接続設定段階で、早くもスプレッドないしはスリッページに絡む重要な設定選択肢に直面する。それはシステム注文を「成行注文で執行」するのか、それとも「指値ないしは逆指値で事前に発注」して執行するのかという選択肢である。

指値か成行か

ボラティリティ・ブレークアウト取引戦略最大利点の一つに、「事前に注文を入れておくことが出来る」という特徴がある。日足システムの場合、朝方その日一日の注文を入れておけば次の日の朝までは何もしなくて良い。それでこのメリットに慣れてしまうと、事前に入れたストップ注文でシステムを執行する事は当たり前となり、わざわざ成行で執行するなどと言う考え方そのものに大きな違和感を覚えるようになる。

設定マニュアルをよく読むと判明するのだが、ひまわり証券は成行注文で自動発注する事を強く勧めており、私に馴染み深いストップ注文による事前発注を勧めていない。その理由は「同期」という自動発注独特の概念と関係が有るのだが後で述べることにし、具体的にどのような選択を求められているのか、先に説明する。

1時間足使用のブレークアウトシステムは、毎時間終了ごとに次のバーのストップエントリーを計算する。今ロングポジションを建てているとしよう。例えば朝の10時直前に9時のバーが100円丁度で引けて、次の10時台のバーに対してリバーサル・ストップ注文を発注することになったとする。売りリバーサル・ストップが99円であった場合は、そのストップ注文をそのまま次の1時間バーに向けて事前発注するわけだ。

そして10時台にプライスが99円に到達するかどうかを監視するわけである。到達したと判定するとシストレ口座が同じ様に同期しているかどうかを確認する。プライスが到達しなければ、次の11時台のバーに対して再計算した新たなストップ注文を更新発注する。この事を繰り返すわけだ。一見全く問題が無い手順のように見える。

成行発注方式

ひまわり証券が推奨する自動発注の注文方式は異なる。売りストップを「事前発注」せず、トレードシグナル内でそのストップにプライスが到達するか否かを監視追跡するのだ。そしてもし99円に到達したらその瞬間に、シストレ口座に向けてダブル売り(ドテン)の成行売り注文を発注するのである。自動発注と言う点では変わりないのだが、事前発注(リーブ・オーダーとも言われる)ではなく、成行注文発注なのである。

同期

では何故、自動発注のシストレ注文では成行注文が推奨されるのだろう。その原因はポジションの「同期」をシステムと口座との間で保つ為である。「同期」というのは自動発注特有の概念であるが、実は普通の日常的市場取引でも「同期」は行われている。ただ現代市場取引メカニズムとITインフラの発達で、同期が問題化するようなシチュエーションが無くなり、もはや誰も意識しなくなっただけの事である。私自身、通常取引の全履歴を通じて、発注したポジションと業者の口座内のポジションが食い違った事はたった一度しか無かった。

ではこれほどITテクノロジーが発達していると言うのに、その最先端を走るシストレにおいて、いまさら何を「同期」出来ないと言うのだろうか?本当に事前発注式のストップ注文では同期不調が発生するのだろうか。そしてその不調によりどの様な収益上のデメリットが発生するのだろう?

これは両方をシミュレーションしてみて、その収益特性を比較する以外に適当な答えは得られそうも無い。ところが取り掛かってみると、これ等の同期問題のシミュレーションはその調査モデルを構築することが簡単では無く、また私が発案した調査モデルの結果によると想定外の重大な影響を収益にもたらすらしいことが徐々に判明してきた。

私の知る限りこの様な詳しい調査が公開されるのは恐らく業界では初めての出来事だろう。私自身はこれまで同様の調査が公開されたり議論された例を見たことが無い。

価格生成の原点:スプレッド

まず調査を始めるにあたり次の基本原理を頭の中に叩き込んでおきたい。本章で解明を試みる論点は殆ど全ての問題の源流がここから発生し、そして答えもここから得ることが出来る。

ひまわりFXシストレ口座のスプレッドは次の様に定義される。

この先スプレッド一覧表が提示され、その次に重要な付随的定義が下記のとおりに述べられる。

以上の原理を出発点として、成行発注方式と事前発注方式の自動発注がどのように執行され、収益にどのような影響を与えるかを、これからシミュレーションして比較することにする。その結果が重大なものなのか、無視できるようなものなのか一度明確にしておきたい。
※ひまわりFXシストレ口座の説明内容は、2010年10月20日時点のものになります。

成行発注方式シミュレーション

成行発注方式とは、先ほども述べたように、トレーディングシステム内の仮想取引で買いが発生した時に間髪を入れず、現実取引のシストレ口座に向かって買いの成行注文を発注し、売りが発生した時は同じく売りの成行注文を瞬時に発注する。

ビッドオンリーデータ

システム内部の仮想取引に使われるデータはビッドオンリーデータである。現実の取引ではビッドとアスクの二つの呼び値が絶え間なく揺らぎながら流れている。システム内部ではビッドデータだけで全ての取引が成立していると見做しており、ビッドプライス100円で発生した買い注文は100円で成立したと記録され、ビッド100円の売り注文は、やはり100円で成立したと記録される。

シミュレーションで得られた収益曲線はこの前提で計算されている。これがシステムデフォルトで計算するゼロスプレッド取引である。この前提はもちろん現実の収益シミュレーションとしては間違っている。

現実のシストレ口座内では、前項で述べた2ウェイプライス原理により発生するスプレッドの為に、システムビッド100円で発生した売り注文は、その瞬間の現実ビッドもやはり100円近辺で留まっているはずなので100円で約定するはずである。売りの場合、システムは現実と同じビッドデータの流れを使用しているので大きな問題は発生しない。

スプレッドコストの発生

ところが、買い注文では全く違ったプライシングメカニズムで約定する。買い注文は現実世界ではビッドではなくアスクに合わされて約定する為に、ビッドプライス100円に1スプレッド分のコストを上乗せしたアスクプライスで約定するのである。シストレ口座のドル円スプレッドは公示価格0.028円なので100円ではなく100.028円となる。ユーロドルのスプレッドは0.00032USドルである。

このようにして1往復取引を完結させた場合、1スプレッドに等しいコストが発生する。しかも、システムが売買を認識して発注した瞬間と実際に約定する瞬間までの間に、現実市場のプライスは絶え間なく揺らいでおり、100円ビッドで成立したシステム売買が現実世界に到達したときに100円で留まっているかどうかは誰にも分からない。

マイナススプレッド

その差異は予想しがたく、想定外に大きくコスト高となることもあれば、逆に想定していたよりも有利に約定される「マイナススプレッド」という現象も発生する。従って個々の往復取引のスプレッドは、公示スプレッドに対して、その都度発生しているプラスマイナスの揺らぎを加えたものであるといえる。一部のFX業者はこの揺らぎの自社調査結果を公開している。通常は差異の平均値とその標準偏差で計測された統計値が発表される。

この揺らぎは定量化するのが非常に難しく、現段階ではこれ以上議論せず、後にそのイメージを把握する手法を述べる。現段階のシミュレーションでは推し量り難く次の様な結論でスプレッドを計算する。

シストレ口座の場合は公示されたスプレッドを入力するわけである。トレードシグナルのスプレッドは片道分を入力する仕様なので、1/2スプレッド分を入力して、シミュレーションをやり直す。このスプレッド設定が本当に正しいのかどうか簡単な検証手法を後に紹介する。

スプレッド調整済みのシミュレーション

前章で探り当てた最適化モデルをもう一度ここでコストの観点から再検証してみよう。下図に示すのがその戦略で、前章で探索した最良モデルの第一候補だったユーロドルのシストレ戦略である。上半分が時間足チャート3年余りとそれに付随する売買シグナル、下半分がゼロコスト収益曲線である。

画像2:ユーロドルEUR0Nモデル、仮想変動率=100%、スリッページ無し。筆者作成
(画像2:ユーロドルEUR0Nモデル、仮想変動率=100%、スリッページ無し。筆者作成)

 

使用データ

上図上半分にはユーロドルのビッドオンリー1時間足価格データと売買シグナルが描かれている。このデータはトレードシグナルにリアルタイムでフィードされるビッドデータで、シストレ口座と同じものである。前章で実施した全幅探索シミュレーションでは、このデータをわざと使わず、外部から取得したビッドオンリーデータを使用した。FXデータは通常ビッドオンリーで記録保存されるのが普通であり、アスクデータを別途保存したり公開したりする例は皆無に近い。一般的ニーズも無いからだろう。トレードシグナルはリアルタイム・アスクプライスを外部データとして呼び込み参照する事は可能である。

この外部データでシミュレーション探索した最適化モデルを、トレードシグナル・データで取引させた結果が上図(画像2)である。全幅探索シミュレーション期間は、画像2の右側約3分の1を占める領域だった。それ以前(左側)の、2009年10月より以前の領域はシミュレーションした事がない未知の領域なので、ここに提示された左2/3の領域はウォーク・バックワードによる新世界処女航海取引結果である。

スプレッド調整後の収益曲線

公示0.00032ドル(往復取引)のスプレッドをマネーマネジメント機能のスリッページ入力欄に片道分を入力し、収益カーブを再計算してみる。すると次のような収益カーブが得られた。下図(画像3)は執筆している時点での再計算なので、上図(画像2)に比べるとユーロドルの取引期間が数週間分ほど更新追加されている。

画像3:ユーロドルEUR0Nモデル、仮想変動率=100%、3.2ティック・スプレッド。筆者作成
(画像3:ユーロドルEUR0Nモデル、仮想変動率=100%、3.2ティック・スプレッド。筆者作成)

3.2ティックのスプレッドを差し引くと収益はほぼフラットと言う結果になる。何故この様な結果になるのか、分かり易く説明すると次の様になる。下図(画像4)はコスト計算を理解する為に作成したレイアウトで、直近1年間の収益カーブを左からゼロコスト、1スプレッド調整、3スプレッド調整で提示したものだ。

画像4:EUR0Nモデルを0ティック、1ティック、3ティックのスリッページで取引し比較した結果
(画像4:EUR0Nモデルを0ティック、1ティック、3ティックのスリッページで取引し比較した結果)

画像の下半分は直近1年間のパフォーマンス・レポートの一部である。レポートから「平均損益」の部分を選択して表示してある。字が小さすぎて読み取りにくいので、注目すべき箇所を写し取って下記の表を作成した。

平均損益

何処を見て欲しいかと言うと1行目「平均損益」である。全てのトレードの平均損益は$4.18となっている。言い換えるとユーロドル4.18ティックが平均利益という事である。この場合ティックはユーロドル表示価格の下4桁を指す。近来ユーロドルは下5桁でネット取引される事が多いが、ティックは下4桁を指す。1ユーロを取引して、1取引(=往復取引)あたり0.000418ドルの平均収益を得たという意味である。

バックワードテスト

実はこの表はシミュレーション期間とバックワードテスト期間の成績の差異を比べる機能も持たせて作った。バックワードテスト期間を含む、全期間の平均損益は3.26ティックだった。バックワードテスト期間はシステムが一度も見たことが無いデータの期間であり、しかも100年に一度といわれる金融危機が発生したリーマンショック期間を含んでいる。その結果ゼロコスト平均損益は更に落ちて3.26ティックになったのである。従って、そこから3.20ティックのスプレッドを引く事により平均損益がほぼゼロに落ち着いたというわけだ。

高頻度取引戦略

なおこれは、利益を上げるときも損失を被るときも一桁の損益を挙げているという意味ではない。平均利益も平均損失も数十ティック台である。しかしその差と勝率を加味して均した(ならした)1取引あたりの平均収益は3~4ティックである事を意味する。ボラティリティ・ブレークアウトとは基本的には頻繁取引により極小値幅取り収益を累積して最大成果を達成しようとする戦略に他ならない。高頻度取引の収益特性は統計的な信頼性が高いと言う重要な優位性に頼っている。それが時間足取引では裏目に出てくるのだ。

さてここからどちらに向かって進むかは様々な選択肢がありそうだが、次のような候補が挙がる:

  1. 高頻度取引ではなく低頻度取引で、平均収益が平均コストを上回るストラテジーを探索する。
  2. レンジ幅の広いマーケットを取引して平均損益幅を広げる。
  3. 時間枠を1時間足ではなく、数時間足で再調査する。乃至は分足で再調査する。
  4. 損切りストップ、利食いリミット、各種フィルターを追加して平均収益を底上げする工夫をする。
  5. 成行発注ではなく、ストップ注文による発注方式をここで調査して良い結果が出るかどうか検討する。

本章ではストップ注文のスリッページに絡む様々な問題点を徹底的に洗い出して把握する事が焦点なので、最後の選択肢を選ぶ事にして議論を進める。このような議論は難解で、戦略スクリプトを書いているプログラマーなら理解しやすいのだが、損失回避、利益獲得と言う万人共通の目標を達成する為なのだから、是非一度完全に理解する事をお勧めしたい。特に時間足や分足で超短期取引を試みる方や、自動執行を目論む読者には、避けて通れない関門だと思う。

ストップ注文事前発注方式のシミュレーション

ではここで「ストップ注文を事前に発注する方式」の検証を開始する。この方式の理論的予想収益は、最初に掲げたゼロコストシミュレーションのようになるのだろうか?もしならないとすると何が原因で、どの程度の損益差が発生するのだろう?

スリッページの推定

ストップ注文で発生する逆指値と約定価格の差異を「スリッページ」と呼ぶ。日本語では価格の「滑り」と呼ばれる事が多い。スリッページは実際に発生するのだろうか?発生する場合は、どの程度と推計すればよいのだろうか?

ここで実践体験から述べると私の個人的ネット取引経験では、ストップ注文はその額面どおりの値段で執行されていた。オランダから、ネットFXを世界で初めて導入したロンドンの著名業者で取引していたのだが、ある日業者から「その様な保障は残念ながら今後中止する」という連絡メールが入ってきた際に、今まで額面保障が行われていたのだと知った。

現在、そのような保障をする業者は恐らく皆無であり、また度重なる市場危機の取引では異常なくらいスプレッドが開くのも当たり前となったが、平常時にはしばしば額面どおりもしくは僅少のスリッページでストップは執行されるというのが私の印象で、とんでもないスリッページに腹を立てたりした経験は無い。

そこで次の様に考えてみる。成行注文のように1スプレッド分に等しいスリッページが発生するとは考えられない、実際には1ティック程度の平均スリッページを想定すれば十分ではないか?その場合は、ゼロコスト収益から全往復取引につき1ティックをスリッページとして差し引いて再計算すれば正しそうな予想収益となるはずである。

この場合の予想収益は先に画像4で示した3つの計算結果の中で、上段中央図の1ティック・スプレッド調整のシミュレーション結果と同じになるはずである。年間2000ティックの予想収益といえば、これは桁外れに優秀な成績である。

そういう期待で現実のシストレ口座に繋げて、今度は実際にシステムを走らせて見た。その結果はどうだったか?実は唖然とするほど予想外の問題が発生したのである。スリッページなど問題ではなくシステムとシストレ口座の同期が支離滅裂の結果になった。しかもその結果想定外の損失が発生するらしい事が分かり始めた。私は自分の事をベテランだとは思ってはいるが、5年に一度はこの程度の間違いを犯す。執筆計画が崩れ、投稿が2週間も遅延したのはこのためである。

これは悲しすぎて最早喜劇と言ってよかった。チャップリンは一番悲しい瞬間に泣いたりはしない。ニコリと笑うのである

同期が失われる原因を究明する

なぜこんな風になってしまったのか、漠然とは分かるのだが、明快な説明モデルをまだ見つけていない。不備があるかもしれないが、次の様に考えを纏めてみた。問題の本質はスリッページ額の推定にあるのではなく「約定の有無」の推定にあった。ここで勘違いをしたらしい。

最大の問題は、システムが読み取るデータがビッドオンリーデータだということである。現実世界にはシステムが認識していないアスクプライスの流れがあり取引の半分はこちらの方で処理されている。この差異が原因となってシステムとシストレ口座の二つの世界はどんどん乖離して、遂にはコンタクトを失うのである。

ストップ注文執行の説明モデル

下図(ストップ注文約定モデル)をご覧頂きたい。これはシステムから発注されたストップ注文がどの様にシストレ口座で処理されるかを説明する図である。中央の黒棒はシステムが見ている1時間足でビッドプライス。左側はシストレ口座が見ているビッドプライスで、システムが読み取るデータと全く同じである。

右側の赤棒はシストレ口座が見ているアスクプライスの1時間足で、これがシステムにとっては存在しない世界である。アスクプライスはビッドプライスと比べて1スプレッド上方向に位置している。1スプレッドを今仮にドル円を例に2.8銭(=0.028円)と仮定する。またストップは呼び値がストップ値に到達したときに約定すると仮定する。(場合によっては呼び値がストップ値を抜けたときに約定すると取り決める方式もある)

画像5:ストップ注文約定モデル、筆者作成
(画像5:ストップ注文約定モデル、筆者作成)

まず売りストップから始める。中央のシステムが見ているプライスがSellストップ(99円と仮定)に到達した瞬間にシステムはSellストップがシストレ口座でも約定したと期待する。左側の業者は事前売り注文をシステムが見ているのと同じビッド側で執行するので、シストレ口座でもシステムと同じ瞬間に売り99円で約定する。

買いストップの不都合

次に買いストップであるが遥かに複雑な不都合が発生する。まずBuyとBuy2の二つの買いストップを想定し、それぞれを別々に検討してみる。

システムはプライスがBuyストップ(100円と仮定)に到達したので、買いストップが約定したと期待する。事実その頃にはシストレ口座からBuyストップが約定しているという確認を取る事が出来る。業者は買いストップをアスクプライス側で執行するのだが、アスクは買いストップを既に抜けて100.028円に到達しており、それ以前に100円Buyストップは100円で約定しているからだ。

一見問題は無い様に見えるが同期の問題が隠れている。この100円Buyストップはシステムがビッド99.972円に到達した頃には既に執行されてしまっているのだ。アスクが100.000に到達しているからである。つまり後講釈では損益の問題にまでは至らないのだが、買いストップがシストレ口座で実際に執行された瞬間、システムはまだ執行されてはいないと思い込んでいるという勘違い(不同期)が発生しているのである。

損失の発生と同期の喪失

この問題が損失として表面化するのが上図(画像5)Buy2の水準に事前発注された場合の買いストップである。システムはBuy2が執行されたとは認識しない。見ているプライスがBuy2ストップにまだ到達していないからだ。ところが現実のシストレ口座では買いストップを処理するアスクプライスがBuy2ストップ注文に既に到達しているために、このストップは約定してしまうのである。

その後仮にこの1時間足の高値はそこまでで高値更新が無かったとする。そうするとシステムは買いストップが執行されておらずショート認識のまま、一方シストレ口座では買いストップが執行されてロングになってしまい、しかも未確定損失を発生させているはずである。ここで自動執行の仕組みは完全に同期を失うのである。

この状況は俗に言うストップ狩りに遭遇した時とそっくりである。付いていないはずの買いストップが付いてしまい損失を被る点が良く似ているからだ。しかしこれはストップ狩りによる結果ではなく、システム取引の構造的な問題の見落としによるものである。

ではどのようにすればこの問題を解決できるのだろうか?

まず最初の問題はこの不同期による損失の見積もりである。もし無視してよいほどの額であればこのまま執行する。シストレには不同期を回復させる現実的手段は幾つか備わっており、それを実行して後追いで強制同期させていく。

最初に取り掛かったのはスプレッドの推計である。ストップ打ちが発生する領域は、システムが見ているビッド最高値とシストレ口座で見ているアスク最高値の間の領域である。一見これは公称スプレッドと同じ様に見えるが、呼び値の揺らぎも関係してくる為に、実際のビッドとアスクのプライスの広がりとその揺らぎ方の両方を調査してみないと真のスプレッドを知ることが出来ない。

そこで次のような簡単な調査方法を考案した。

スプレッドの真の広がりを推定する

まず出所と価格生成の仕組みが分かっている為替の標準ヒストリカル日足データを用意する。とりあえず問題のユーロドルから始めてみよう。

約定値からなる日足データ

この日足データは、約定値からなるヒストリカルデータで無ければならない。著名金融情報プロバイダーが提供する日足データは殆ど全てが約定値データで構成されており容易に入手できる。同じプロバイダーの「時間足」データは駄目である。時間足は通常ビッドデータのみで記録されており、しかも約定値ではなく呼び値で構成されているからだ。つまり同じプロバイダーでも日足と時間足は構成が全く異なる。

次に自分が取引しようとしているFX業者から取得したビッドデータで日足を作成する。トレードシグナルの場合は、日足チャートをエクセルにドラッグ&ドロップすればたちまち出来上がる。トレードシグナルの日足はビッドオンリーデータを日足に変換したものである。この事を覚えておく。

寄り付きと引け値には金融情報データプロバイダー独自の取得ルールがあり、ばらつきがあるので比較する意味が小さいので無視する。

まず高値の比較から始める。エクセルシートに移入したビッドオンリー日足高値から標準日足高値を引いて差を求める。その差を時系列チャートで表記すると下図のようになる。下図は今年の日足を年初から執筆前まで比較した9ヶ月間の記録である。

画像6:ユーロドル、ビッドデータ高値と約定高値との比較。筆者作成
(画像6:ユーロドル、ビッドデータ高値と約定高値との比較。筆者作成)

約定高値というのはそれが発生した瞬間アスクだった可能性とビッドだった可能性の両方があり、どちらであるかは知りえない。ビッドはアスクよりも必ずスプレッド分低いので、このチャートは、「ビッドとアスクの混合である標準約定高値よりもビッドデータが低いだろう」という数学的期待と一致している。

次に、同様にしてビッドデータ「安値」と標準約定「安値」との差異を求めその平均を得た。

同じくビッドデータの方がビッドとアスクの混合である標準約定データよりも低い。これも数学的期待通りである。

以上の観察をもとに考えていくと次のような結論に到達する。

  1. 標準約定高値はビッドないしはアスクの約定値から成り立つ。ビッドとアスクの分布率は知りえないので五分五分と仮定する。そうすると約定高値はビッドとアスクの平均であり仲値であるといえる。
  2. 業者のビッドアスクデータは一方で標準データから乖離はするものの、他方絶え間なく標準約定値をフォローしそれに収束しようともする。そこで標準約定仲値と業者のビッドアスク仲値は平均的に等しいと考えられる。
  3. このことから業者のビッドは標準約定仲値よりも業者スプレッドの約半分低く平均分布すると推量できる。アスクは標準約定仲値よりもスプレッドの約半分高く平均分布する。そこでビッドデータの日足高値と安値の差異を合計したものがビッドとアスクの広がりであると推定できる。ユーロドルの場合は2.2プラス0.9で合計3.1ティックがスプレッドだと推定する。
  4. この3.1ティックをビッドオンリーデータ高値に加えたものが推定アスクデータ高値である。

驚いた事に、これはひまわり証券のユーロドル・スプレッド公称値3.2ティックとほぼ同じ値だった。

次に同様の調査を公示スプレッドがかなり広いポンドドルで行ってみた。

画像7:ポンドドル、ビッドデータ高値と約定高値との比較。筆者作成
(画像7:ポンドドル、ビッドデータ高値と約定高値との比較。筆者作成)

こちらもひまわり証券の公示スプレッド9ティックとほぼ変わりが無かった。

ここでひまわり証券の取引プライスを上述の期間中仔細に観察した事のある方は既にお気づきだと思うが、シストレ口座が常時提示しているユーロドル・スプレッドは実際には3.2ティックよりも狭い。ポンドドルにも同じ事が言える。良くこの調査結果を検討してみるとこの調査が探し当てたスプレッドとは、ビッドアスクの呼び値の差だけではなく、プライスの揺らぎ分も含まれていることが分かる。真のスプレッドはこうしたプライスの揺らぎ分も含めて推計すべきものだという事が分かる。

プライスの揺らぎは如何に発生するか

プライスの揺らぎは主に三つの原因で発生するように思える。第一に、価格が安定しているときでさえ、ビッドプライスだけを見ても上下に震動していること。下図の例では平均価格83.57に収束して安定しているときのビッド呼び値でさえ、常時83.56から83.59の間で震えているのが分かる。このような状態ではスプレッドが例えば2銭であると分かっていても、自分が成行で注文を入れたときに実際にどのプライスで執行されるのか事前に知り得ない不確実性が生じる。

画像8:ドル円ビッド、ティックデータの振動例。最低変動価格=1銭。筆者作成
(画像8:ドル円ビッド、ティックデータの振動例。最低変動価格=1銭。筆者作成)

第二にそのような振動が連続的な線として発生しているのではなく、下図のように呼び値は実は点として一つのプライスから次のプライスにジャンプしている事である。このジャンプの度合いが大きくなるとストップに引っ掛かり易くなり、しかもスリッページが発生しやすくなる。スプレッドが広がるのと同じ効果で約定の予想領域が広がるのである。これも揺らぎの原因となりうる。話が元に戻るが、下図の例では前述したプライスの振動現象も見て取れる。点が二本の平行線の様に見える部分が振動領域で、ここではビッドプライスが二つの価格水準の間を忙しく振動しているかのごとくジャンプしているわけだ。

画像9:ドル円ビッド、ティックデータの振動領域 筆者作成
(画像9:ドル円ビッド、ティックデータの振動領域 筆者作成)

以上のような恒常的な価格の揺らぎはストップ注文を早めに打たせる原因となりうる。その為にスプレッドが広がったのと全く同じ効果をもたらす。

最後に挙げられるのがスパイクといわれる現象。これは俗に言うストップ打ちのことである。つい最近見た例を掲げる。下図ユーロドル・ティックチャートの21:30時過ぎに発生した高値スパイクがそれで、これはその次に掲げる標準的なインターバンクチャートには出現しなかった。

この様なスパイクはアルゴリズム取引の一種で、自動的に執行される。極短い期間に急騰して急落する(乃至はその逆)のが特徴で、この走る領域内に売りリミットと買いストップが都合よく散在している時に一瞬にして全てを打つことに拠って利益を確定することが出来る。機会さえあれば1ティックの収益を狙ってでも発生する。

良く自分が負けた理由をこの様なストップ打ちのせいにするトレーダを見かけるがそれが正当な考えであるとは思えない。これは弱肉強食の競争を基本原理とする市場価格変動メカニズムの一部であり、これ無しに市場が成立するとは考えられない。揺らぎとして認識し受容すべき市場現象である。大部分の微小な価格の急変は一種のミニスパイクであるとも考えられ、市場の平常態と見做すべきである。そしてもちろんシミュレーションの対象として調査済みとなっていなければならない。

またこの二つのティックチャートを比較する事で、ティックデータは出所が異なれば見かけも大いに異なってくるという事が良く分かる。私が取得可能な限り多様なデータを使用するのはその為である。

以上全ての現象が、価格の揺らぎを形成し、ストップの想定外早期執行の原因となりうるのである。シミュレーションソフトによる適正化とはこのような障害をギリギリのところで逃れるパラメータを発見する事でもある。このギリギリの領域を見誤まらないようにしよう。

画像10:21:30時過ぎ、買いスパイク発生の一例。ユーロドルティックデータ。筆者作成
(画像10:21:30時過ぎ、買いスパイク発生の一例。ユーロドルティックデータ。筆者作成)

画像11:同時間帯のインターバンク・ユーロドルティックデータ。筆者作成
(画像11:同時間帯のインターバンク・ユーロドルティックデータ。筆者作成)

同期を図るにはどうすれば良いか

以上の事を全て踏まえた上で、同期を図る具体的な方法を考案してみた。揺らぎをも含めたスプレッドの推定は以上の手順で完了したとする。このスプレッドをどの様にシステムに認識させれば同期できるかを考えてみる。

色々な試行錯誤を重ねてみた。最初に思いついたのは次のような方式である。それはビッドオンリーの歴史的データを書き換え、揺らぎを含めた推定スプレッドを上乗せした拡大データを作りそれでシミュレーションをやり直し、別の戦略を見つけることである。これは実際にやってみたが特に興味を惹くような結果は出なかった。それに別の戦略を見つけるのだから、懸案の同期問題を直接解決した事にはならない。

現時点で見つけた最良の同期の手法は、友人のシストレ・エキスパートが思いついたものである。

この案は、驚くべき独創的な解決方法である。

確かにこの方式だとシステムが発注するストップ注文は現実のシストレ口座と同じタイミングで約定するはずだ。そこで戦略スクリプトに買いストップも売りストップもプラスマイナス両方向に自由にスライドさせる機能を追加した。現在このツールで調査続行中であるが、いままで知ることが出来なかった様々な事をシミュレーションする事ができる。

問題はただ一つ、この様にスライドさせたストップ注文発注システムのコストは成行注文発注方式と同じく、1往復につき1スプレッド分の収益の減少となるのである。この減少分はスライドそのものから来ており、避けられないものであるようだ。そうなると「成行注文方式」と期待収益はさほど変わらなくなる。

しかしここまで徹底的に調査してきたおかげで、スプレッドとスリッページに関する広い知識と検証モデルを得ることが出来た。これを推し進めて行けばシミュレーション最大の隠れた難関の一つであるスリッページを突破できるかもしれない。

次号では時間足逆張りの戦略を調査していく。

第VII部:システム構築と評価 第3章:ヒストリカル・シミュレーション(3:スプレッドとスリッページ) 、 田中 雅 2010年10月20日