1

ビジネス ドメイン Order オブジェクトをエンコード (FIX に変換) およびデコード (FIX から変換) する単純な FIX メッセージ エンコーダーとデコーダーを設計しようとしています。何かをデザインしましたが、思い通りの美しいデザインを実現できません。この種のものを構築した経験のある他の人がより良いデザインのアイデアを持っているかどうかを確認したかった.

これは私が大まかに持っているものです: ビジネスオブジェクト注文、QuickFIX オブジェクトメッセージ。NewOrder/Cancel/Replace メッセージを生成する必要がありますが、交換ごとにメッセージが異なる可能性があります。ReplaceEncoder --> NewOrderEncoder --> AbstractEncoder、CancelEncoder --> AbstractEncoder を持つことができます。しかし、これに別の次元が必要な場合、たとえば、さまざまな交換用にカスタム メッセージを生成する場合、階層の組み合わせが多すぎます。

私の唯一の賭けは、さまざまな取引所に対してさまざまなコードを平凡に書くことですか? 他の人はこれをどのように達成しますか? ありがとう。

4

4 に答える 4

2

おそらく私たちと同じような問題に遭遇するでしょう。つまり、各FIX実装は異なります。4.2を使用するもの、4.4を使用するもの、タグを使用するもの、無視するもの、独自のタグの多くを使用するもの、ごくわずかしか使用しないものがあります。私たちが行ったことは、FIX 4.2および4.4のサブクラスを使用して一般的なFIXセッションを作成し、次に各特定のセッション(つまり、個々のブローカー)のサブクラスを作成することです。これにより、FIXメッセージを送受信するためのコードを合理的に再利用できます。アカウント名やパスワードの処理などの詳細が変更されました。

メッセージ生成には、アダプタを返すファクトリメソッドがあります。すべてのアダプターには、ビジネスオーダーオブジェクトをFIXメッセージオブジェクトに変換する同じAPIがあります。もちろん、各アダプターはブローカーのAPIに固有です。おそらくアダプター間でコードを再利用できると思いますが、現在は使用していません。

于 2012-10-11T14:29:13.993 に答える
2

私の唯一の賭けは、さまざまな取引所に対してさまざまなコードを平凡に書くことですか?

確かにそうではありません。FIX メッセージには、必須フィールドと非必須フィールドがあります。メッセージの信頼性と完全性を保証できないため、必須フィールドについて交渉することはできません。これが不可能だと言っているわけではありません。多くのカウンター パーティーは、独自の特定のメッセージを交換する独自のユーザー レベル契約を結んでいます。

Quickfix を使用すると、エンジンがメッセージの完全性を確認する XML データ ディクショナリが手に入ります。独自の要件に合わせて微調整します。あなたは確かに複数のセッションを持つでしょう。これが可能かどうかはわかりません。自分で試したことはありません。セッションごとに異なるデータ辞書を使用できますか? はいの場合は、それらをさまざまなカウンターパーティに使用してください。それが不可能な場合、私の頭をよぎる 1 つの方法は、メッセージ全体ではなく、特定のカウンター パーティからのメッセージに、特定のフィールドを処理するためのコードを追加することです。

私が働いていたある場所では、これらのラインで何かを使用していました。どんなバージョンでも受信できますが、メッセージを受信したら、システム内にのみ存在する特定のバージョンの FIX メッセージに変換します。したがって、エンジンは基本的に 1 つの FIX バージョンのメッセージのみを読み取ります。しかし、さらに複雑になるのは、コンバーターをコーディングする必要があることです。それがあなたにとってどれほど実現可能かはわかりません。

于 2012-10-11T14:26:45.907 に答える
1

FIX は、メッセージ定義に関しては非常に滑りやすいプロトコルです。

実際には、FIX インターフェースを提供するすべての機関が、デフォルトのメッセージ セットに変更を加えています。つまり、たとえば、相手方 A からの FIX4.4 NewOrderSingle メッセージは、相手方 B からのメッセージとは異なるフィールドを持つ可能性があります。

実際、カウンターパーティー A は、いくつかのフィールドを完全に作成して追加した可能性があります。新しいカウンターパーティーの場合、これまでに見たことのないフィールドに遭遇する可能性があります。

いくつかの異なる交換用にいくつかのアダプターを作成しましたが、残念ながら、それらを個別に処理する必要があります。いくつかの共通点を利用できるかもしれませんが、FIX インターフェースの仕様を確認するまでは、それについて推測することはできません。

だから、あなたの質問への短い答え:

私の唯一の賭けは、さまざまな取引所に対してさまざまなコードを平凡に書くことですか?

うん、かなり。

于 2012-10-11T20:04:00.723 に答える
0

私たちが最終的に行ったことは、必要な修正タグのみを適用する基本修正レイヤーを作成することでした。修正仕様では、メッセージ タイプごとに特定のタグが必須としてフラグ付けされています。

このメッセージが作成されたら、ブローカーと商品タイプに固有のフィルターをメッセージに適用します。

つまり、ゴールドマンや JP モルガンでオプションや株式を取引する場合は、次のフィルターを記述します。

ゴールドマン株式

ゴールドマンオプション

JPモルガン・エクイティ

JPモルガンオプション

それぞれが、ベンダーおよび機器固有のフィールドをベース メッセージに適用します。

于 2012-10-19T17:38:11.227 に答える