アセマネのファンド為替取引をシステムで管理・自動化する際、意外と厄介なのが「通貨ペアの順序(Base/Quote)」の決定だ。OMSなどの取引管理システムをはじめ、複数のシステム間で為替取引データを連携する際には、売買方向とは別に、FX市場の慣行に従った正しいカレンシーペアを扱う必要がある。
本稿では、売買方向にかかわらず、FX市場の慣行に従ったカレンシーペアを判定する「通貨順マスタ」の構築手法を整理する。具体例としてSWIFT MT300を取り上げ、通貨ペアの表示順、取引方向、Exchange Rateがどのような関係になるのかについて、実務的な観点から記録する。
1. 通貨ペアの順位に「世界共通の公式規格」は存在するか
結論から言えば、全通貨のペア順序を網羅・定義した単一の公式規格は世界中どこにも存在しない。
ISO 4217は3文字の通貨コードを定義しているのみであり、ペアの順序には一切関与していない。FXの通貨ペア(Currency Pair)の表示順は、特定の機関が定めた規則ではなく、歴史的な経緯の積み重ねによる「市場慣行」として形成されてきたものである。
2. SWIFT MT300照合における「取引方向」と「レート」の分離
社内システムにおいて通貨ペアの表示順を市場慣行に合わせて管理すべき最大の理由は、SWIFT MT300等での約定照合を正確に行うためだ。
MT300において、「通貨ペアの表示順(市場慣行)」「取引の方向・金額」「適用されるレート」はそれぞれ明確に分離して扱われる。本稿のテーマに関連する主要な項目は以下の通りだ。
| Field | 項目名 | 意味・役割 |
|---|---|---|
| 32B | Amount Bought | その取引で買い付けた通貨および金額(取引の方向と規模)を表す項目 |
| 33B | Amount Sold | その取引で売り渡した通貨および金額(取引の方向と規模)を表す項目 |
| 36 | Exchange Rate | 取引時に合意されたカレンシーペアのクォート方向に基づくレート(Agreed Exchange Rate)を設定する項目 |
Field 32BとField 33Bは、その取引でどちらの通貨を買い、どちらを売ったかという「取引方向と金額」を表す。
一方で、Field 36(Exchange Rate)は、送信者が好きな方向のレートを任意に選んで入れるものではない。BoughtとSoldのどちらの通貨を基準にするかで機械的にレートの方向が決まるわけでもない。
具体例として、市場慣行でUSDがBaseとなるUSD/JPYと、JPYがBaseとなるJPY/KRW(韓国ウォン)の2つのケースを挙げる。
USD/JPY の場合(USDがBase) 約定レートが「1 USD = 150.00 JPY」なら、取引方向に関わらずレートは 150.00 である。
- USD買い(JPY売り) → 150.00
- USD売り(JPY買い) → 150.00
※「USD売りだから逆数(1/150 = 0.0066…)」とはせず、常に「150.00」を設定する。
JPY/KRW の場合(JPYがBase) 約定レートが「1 JPY = 9.00 KRW」なら、取引方向に関わらずレートは 9.00 である。
- JPY買い(KRW売り) → 9.00
- JPY売り(KRW買い) → 9.00
※取引方向に関係なく、常にBase通貨である円基準の「9.00」を設定する。
誤解されがちだが、SWIFT自体が「全通貨のペア表示順を一律に規定している」わけではない。あくまで「市場や取引慣行に基づくカレンシーペアの方向でレートを合意し、それをMT300のField 36に設定する」という構造になっている。
3. システム設計用「通貨順マスタ」の実務的アプローチ
完全な世界共通規格は存在しないが、実際のアセマネのシステム設計においては、各通貨にPriority(優先度)を持たせ、2通貨のPriorityを比較してカレンシーペアの表示順を決定する方式が実務上よく用いられる。
以下の表は、ISOやSWIFTが定めた公式順位ではなく、「主要FX市場で広く見られる慣行をベースにした実務上の目安」である。
特に上位の「EUR → GBP → AUD → NZD → USD → CAD → CHF → JPY」という並びは、一般的なFXクォート慣行として定着している。ただし、アジア通貨など順位が下位の通貨間においては、市場やデータベンダー、取引商品(NDFなど)によってクォート方向に差が生じ得る点には留意が必要だ。
| Priority | Currency | 通貨名 |
|---|---|---|
| 1 | EUR | ユーロ |
| 2 | GBP | 英ポンド |
| 3 | AUD | 豪ドル(オーストラリアドル) |
| 4 | NZD | ニュージーランドドル |
| 5 | USD | 米ドル |
| 6 | CAD | カナダドル |
| 7 | CHF | スイスフラン |
| 8 | SGD | シンガポールドル |
| 9 | MYR | マレーシアリンギット |
| 10 | CNY / CNH | 中国人民元(オンショア / オフショア) |
| 11 | TWD | 新台湾ドル |
| 12 | THB | タイバーツ |
| 13 | PHP | フィリピンペソ |
| 14 | JPY | 日本円 |
| 15 | KRW | 韓国ウォン |
| 16 | IDR | インドネシアルピア |
| 17 | VND | ベトナムドン |
4. 通貨順マスタの判定ロジック例
各通貨に持たせたPriorityを比較し、数値が小さい方(優先度が高い方)をBase Currencyとして判定するシステム実装例を示す。カッコ内は上記マスタにおけるPriorityの数値である。
| Currency A | Currency B | Market Pair |
|---|---|---|
| USD (5) |
JPY (14) |
USD/JPY |
| EUR (1) |
JPY (14) |
EUR/JPY |
| GBP (2) |
USD (5) |
GBP/USD |
| JPY (14) |
KRW (15) |
JPY/KRW |
| USD (5) |
KRW (15) |
USD/KRW |
| CNH (10) |
JPY (14) |
CNH/JPY |
| SGD (8) |
JPY (14) |
SGD/JPY |
このように、通貨ごとのPriorityをシステム内にマスタとして保持することで、取引データからカレンシーペアの表示順を自動判定できる。MT300のField 36(Exchange Rate)については、このカレンシーペアの方向と約定した取引金額をもとに、取引内容と整合するレートとして設定・照合する。
5. ISO 20022移行による課題の構造的解消
金融業界で移行が進められているXMLベースのメッセージング標準「ISO 20022」では、FX取引におけるレートの方向を、従来より明確に表現できる構造になっている。
従来のMT300では、Field 36(Exchange Rate)はレートの数値を表す項目であり、レートの方向を独立した通貨項目として表現する構造ではない。そのため、送受信システム間でカレンシーペアのクォート方向に関する認識を一致させておくことが重要だった。
一方、ISO 20022のFX約定メッセージ(fxtrシリーズ等)では、為替レートのデータ構造内に「Unit Currency(ベース通貨)」と「Quoted Currency(クォート通貨)」を明示する項目が用意されている。これにより、メッセージ自体からレートの方向を把握しやすくなり、システム間の認識違いを減らしやすい構造になっている。
とはいえ、カレンシーペアはSWIFTだけでなく、OMSなどの取引管理システムや、社内システム間のデータ連携、画面表示、データウェアハウスでの集計など、様々な場面で利用される。ISO 20022への移行後も、市場慣行に基づいてカレンシーペアを統一的に管理する「通貨順マスタ」の考え方は、引き続き実務上重要となる。
