為替予測モデルの構築に挑戦したい人にむけての基礎知識
こんにちは、マケデコを運営しているtomoです。
本記事はマケデコAdvent Calendar 2024の記事として執筆させていただきました。
以前、以下のようなツイートをしたところ結構反応があったので、為替モデルについて興味がある人のために最初の一歩を踏み出せる記事を書いてみたいと思います。
最近、yoshisoくんが手元でとんでもない勝率を叩き出してbotter界隈を騒がしており、僕は最近は依頼を受けたときだけ為替のモデリングを手伝っていますが、最新技術(当時は新規論文のネタを片っ端からチームで為替のモデルに活用するというのを5年近くやってました)にはキャッチアップできていないので、昔話を交えて為替の話(若干妄想)をしたいと思います。
まず、為替とは何か?
FXを触ったり、ニュースをみていると「ドル円」という言葉を聞いてドル円というアセットがあたかも存在しているように感じる人がいるかもしれませんが、為替とは基本的には、以下のようにEURやUSDをどの通貨でいくらで買えるかの情報群です。そしてそれぞれに買うときに買う値段と売る値段で差異があり、その差異をスプレッドとよんでいるのですが、このスプレッド+マーケットメイクの「上手さ」で為替業者は収益を得ています。なので、在庫としては下の例だとEURを持っている人(もしくはEURを即座に仕入れて処理できる信用がある人)がそれをいくらで売るかというプライスを出しているものだと思って下さい。
"base": "EUR",
"rates": {
"AUD": 1.566015,
"CAD": 1.560132,
"CHF": 1.154727,
"CNY": 7.827874,
"GBP": 0.882047,
"JPY": 132.360679,
"USD": 1.23396,
[...]
}
為替の産業構造
我々が相対するFX業者の裏には、リクイディティプロバイダー(以後LP)が存在します。ユーロネクスト、XTXなどの専門業者や各外資系銀行や日本の大きな銀行がこのあたりの業務をやっています。
この処理は超高速な処理が必要で、多くの企業でKx Systemsの提供するkdb+のような高速なオンメモリDBや、より包括的なソリューションであるスマートトレードのLiquidityFXなどを採用しており、まぁ、だいたい似たようなアルゴやプライシングモデルで為替のプライスは決まっていきます。
なので、我々が普段ニュースでみている為替のプライスは10社からのLPのプライスを統合したものを表示していることがおおく、たまに日本の為替のFX業者でミスプライスをしてめちゃくちゃオーダーが入ることがありますが、あれはLPから出ているプライスの処理を間違ったりしてしまったことが多いです。
このあたりの雑談は語ると無限に出てくるのですが、為替というものがおそらく世の中でもっとも最適化されたものであることはこれで想像がつくと思います。EURやUSDというもっともありふれた資産に対して、各社がミリ秒ごとにプライスをだす世界、かつすべての産業構造の基本であるためとんでもない流動性をもっていることから、日本株や暗号通貨とはまったく違うものに見えてきます。
言ってしまえば、日本株や暗号通貨が価値の予測なのであれば、為替の予測というのは長期的に見たらそれは経済の予測であり、短期的みたらそれは需給の予測になります。で、そのアプローチに無数の方法論があります。
では、何を予測するのか
数分先ならマイクロストラクチャーだが利益はでない
上で書いている通り、USDJPYというアセットは存在せず(正確には先物、CFD化してアセットにすることは可能です)USDに対する価値を複数通貨で出していることになります。
で、最初のツイートに戻るのですが、僕が当初為替予測をやったときに注目したのは、為替のマイクロストラクチャーに着目した研究でした。為替のマイクロストラクチャー自体は死ぬほど解説記事があるでのググるなり、ChatGPTにきいてみたりしてください。SIGFINでもよく取り上げられていますね。市場参加者がある一定のルールに従って取引をしているので、市場の中でカオスに見せかけてある小さなストラクチャーの集合体としてマーケットが構成されているというアレです。
当初の研究では、そもそもアルゴリズムがマーケットメイク用だったので、3分後程度の予測で問題なく、この場合、為替の内部に存在するマイクロストラクチャーの予測が有用と仮説を立てました。2018年、当時画像認識ではやっていたCNNを為替向けに魔改造し、この場合、今の生成AIほどではないですが、当時のレベルでの計算リソース勝負になったのでAWSなどのGPUで効率的にモデルを構築する基盤を整備していきました。当時のことをまとめた資料(資料の内容は2018-2020にやったことの集合みたいな資料です)は以下にあるので、興味があればどうぞ。
で、この研究自体は非常にうまくいきまして、MUFGをはじめとする様々な会社でも採用いただき、プレスリリースも出しました。ただ、このモデルの欠点は非常にうまく動くのですが、残念ながら3分の予測では仮に精度60%程度のかなり良いモデルができてもスプレッドには勝てないという問題があります。
安定的に利益をだすためには5分後で80%、10%後で70%程度の精度が必要ですが、まぁ、やってみればわかりますが、これは不可能です。
では、スプレッドに勝つためには何を予測するべきか
これはたぶん答えを持っている人はいません。というか、持っていてもそれは教えてくれません。
強い為替のモデルというのは、その流動性からとても価値が高いので、人に開示する理由がないのです。僕がCNNなどを活用したマイクロストラクチャーの予測を書いているのも、これではマーケットメイクには利用できても、収益をあげるための為替の予測には活用できないことが理由からで、もしこれが収益をがあげることができていたら、開示されることはなかったでしょう。
ただ、ここまでの話でいくつかヒントがありますでの、それをまとめていきます。
シンプルな方向の予測モデルを作る場合、必要な精度が高すぎる
最低でも3時間後予測で55%の精度の予測モデルをつくる必要がありますが、これはかなり難しいです。為替は極めて理想的なランダムウォークをする上に、突然動くときに突発的にかなり動くので、実際に収益を安定化させるための試行回数がかなり多く、1週間に数回しかでないシグナルなどだと収益が全く安定しません。
為替の強弱のモデル
これが僕の最初の発言につながるわけですが、基本的には精度勝負は避けたいので必然的にバスケット的なアプローチを採用することになります。USDやJPYなどのメジャーカレンシーに対して、それぞれの為替の強弱を予測し、ロング・ショート的に為替の予測を行います。これは為替同士の相関を利用するトレードになるので、実際にモデルを作っても、結構うまくいくのですが、突然のレジュームチェンジに非常に弱く、例えば、ADUやNZDとの関係性がいきなり変わったりして大変なことになります。個人的には、まだ惚れてませんがこのモデルを採用するならワンショットラーニングのような直近の可能な限り少ないデータでモデルをつくる技術とセットで研究するのが重要なのではないかと思っています。
仲値、ロンドンオープン、フィキシング、NYオープンモデル
実は、業界で「安定的に勝てるモデルがあるらしい」と噂になる際、よく話題にあがるのが、特定の時刻、特定の慣習、特定のオペレーションフローに依存した予測モデルです。為替市場には、1日の中で特定のポイントに特徴的な流動性や注文フローが生まれる局面が存在します。それが例えば、日本時間の仲値(東京時間午前9時55分前後)、ロンドンマーケットのオープン、フィキシングタイム、あるいはニューヨークオープンなどです。これらの時間帯に起きる「特定の動き」は、多くの金融機関や大口取引参加者による儀式的とも言えるルーティンの一部であり、その結果として何らかの統計的な偏りや再現性のあるパターンが生じることがあります。
何を特徴量に、何を予測するのかのセンスがかなり業界知識に依存するため、普通の為替モデルをつくるよりも業界の知識を活用する余地があり、かつ、この時間帯は非常によく動くので、30分-1時間の予測でも十分に収益をあげることができます。このあたりは、おそらく生成AIを壁打ちにアイディアをふくらませるといろいろなアプローチを教えてくれます。
経済モデル
最後に紹介するのが、経済モデルです。最初に述べた通り、為替はすべてのアセットの媒介変数ですから、それはつまり経済を予測するということです。といっても、そんなことできるかどうかはかなり怪しいわけですが、長期的に見れば「経済ファンダメンタルズ(基礎的経済指標)」がカギを握るとされます。ここでいう「経済モデル」とは、通貨間の相対的な価値関係を、国別の経済状況や政策、地政学的要因をもとにモデル化し、中長期的な為替レートの方向感を把握・予測しようという試みを指します。日経均衡為替レートみたいなアプローチを指しています。
ただ、普通にこれをやってもなにもおもしろくないし、そもそも我々はレバレッジをかけるとはいえ、1週間くらいで結果は出したいので、世の中の4半期ベースの研究はあまり役に立ちません。となると、なにをするかというと、短期と長期をブリッジするようなアプローチを模索することになります。つまり、経済モデルが示す「長期的均衡水準」と、実際の短期的な為替変動をリンクさせるための工夫を凝らすのです。
長期的な経済モデル(PPP、FEER、BEERなど)からは、「この通貨は長期的には割高・割安だ」といった示唆を得ることができます。これを単純にトレードのシグナルとして用いると、長期的な修正方向は当たっていても、その修正が実際に起きるのは数カ月後、数年後、あるいは特定の経済ショック発生後かもしれません。そのため短期的なトレードには直結しにくい。
一方、短期的なフロー情報、例えば仲値やフィキシングといった特定時間帯の流動性バイアスなどは、「今まさにこの瞬間」に起きているミクロな歪みをトレードする上で有効です。しかし、これらは長期的なトレンドとの整合性が薄く、一過性のシグナルにすぎないことが多い。
そこで、両者を組み合わせる手法が考えられます。ここはたぶん、生成AIと壁打ちしたらおもしろいくらいアイディアを出してくれると思いますが、まぁ、だいたいでてくるアイディアはだれかが試しているので、たぶん、もっと突拍子もないことをやって上げたほうがいいです。個人的には、生成AIによるエージェント型のシミュレーターでなんかすごいモデルがでてくるんじゃないかと考えており、僕がいま自分でモデルつくるなら、生成AI使ってこのモデルをやるとおもいます。なによりも面白そうなので。
まとめ
そんなわけで長くなりましたが、今自分が4年越しに為替の予測モデルを開発するならどういうアプローチを採用するかを妄想してみました。たぶん、ほとんどはうまくいきませんが、とはいえ、為替のモデル特有の何をやってもうまくいかない面白さは、結構癖になるので、ぜひお時間がある人は試してみて、もしうまくいったらこっそり教えて下さい。
Discussion