2

私は、初日の持ち株と新しい取引と価格ティックのフィードに基づいて、一連の持ち株のさまざまなメトリックを計算するように設計されたシステムを設計しています。初期情報は、新しい取引と価格更新のイベントを含むWCFサービスから取得されます。

必要なメトリックには、さまざまな方法で階層に集約する必要がある市場価値(MV)が含まれます。

初期ロード時に、次のようなオブジェクトのセットを取得します。

ポジション[数量:ダブル、セキュリティ:セキュリティ、アカウント:アカウント、戦略:戦略]

セキュリティ[価格:お金、国:国、通貨:CCY]

アカウント[名前:文字列、ファンド:ファンド、マネージャー:マネージャー、通貨:CCY]

戦略[名前:文字列]

ファンド[名前:文字列]

マネージャー[名前:文字列]

多重度は次のようになります。

  • マネージャー(1)-manages->(1 .. *)アカウント
  • ファンド(1)-で構成されています->(1 .. *)アカウント
  • アカウント(1)-含む->(1 .. *)位置
  • セキュリティ(1)-中にある可能性があります->(1 .. *)位置
  • 戦略(1)-含む->(1 .. *)位置
  • 戦略(1)-存在することができます->(1 .. *)アカウント

日中に起こることもたくさんあります:

  • セキュリティ価格の変更-セキュリティの価格がa->bから変更されます
  • 新しいポジション-トレードがありました
  • ポジションの削除-取引がキャンセルされました

フロントエンドから-マネージャー/ファンドレベルでデータを表示できる必要があります。

  • マネージャー1
    • 合計MV=$ 4800
    • 最大の国のエクスポージャー=43%英国
    • 合計%MV = 100%
    • コンポーネント:リスト>
    • 国:リスト>
  • マネージャー2
    • 合計MV=$ 1200
    • 最大の国の曝露=90%米国
    • 合計%MV = 100%
    • コンポーネント:リスト>
    • 国:リスト>
  • Fund2
    • 合計MV=$ 1200
    • 最大の国の曝露=90%米国
    • 合計%MV = 100%
    • コンポーネント:リスト>
    • 国:リスト>

またはセキュリティレベルで

  • Sec 1
    • MV = $ 1000
    • マネージャー1の%= 67%
    • ファンド1の%= 48%
  • Sec 2
    • MV = $ 2000
    • マネージャー3の%= 12%
    • ファンド2の%= 4%..。

エンティティは、システムに1回だけ存在するように、IDマップに読み込まれるため、証券の価格の変更は、関連するポジションに反映されます。

私はこれを表すためにさまざまな方法を検討しましたが、概念的にはイベントソーシング(http://martinfowler.com/eaaDev/EventSourcing.html)は有望に見えましたが、現在の状態を確認するだけでよいので、おそらくやり過ぎです。

私の現在の考え方は、マネージャーファンドアカウントポートフォリオオブジェクトとして表すことです。

また、複合パターン(ポートフォリオ:コンポーネント、位置:コンポーネント)+ビジターパターンを使用して、階層+計算ロジックをそれぞれカプセル化します。

ポートフォリオ[オブジェクト:表現、コンポーネント:ListOfComponents、Accept(Visitor v):状態]

コンポーネントにはMV($)もあります(これらは訪問者を使用して計算できます)

MV [position] = * Qty *Security.Price*とします。

MV[ポートフォリオ]=以下のポジションのすべてのMVの合計とします。

したがって、次の複合構造があります。

  • ポートフォリオ(代表:ファンドA、MV:500
    • ポートフォリオ(代表:アカウントA、MV:500
      • ポジション1(MV:300)
      • ポジション2(MV:200)
  • ポートフォリオ(代表:ファンドB、MV 1600
    • ポートフォリオ(代表:アカウントB、MV:1000
      • ポジション3(MV:800)
      • ポジション4(MV:200)
    • ポートフォリオ(代表:アカウントC、MV:600
      • ポジション5(MV:200)
      • ポジション6(MV:400)

私の最初の問題は、さまざまなレベルのパーセンテージの表現にあります。システムは、ポジション5が構成するファンドBとアカウントCの何パーセントを表現できる必要がありますか?

ポジション5MV/アカウントCMV= 200/600 = 33%

ポジション5MV/ファンドBMV= 200/1600 = 12.5%

値は訪問者を使用して計算できますが、計算結果はどこに保存されますか?

次のような位置5の辞書の場合:辞書percentMV = {[ファンドB、12.5%]、[アカウントC、33%]}

または、関連するポートフォリオでは、個々のポジションのすべてがファンドBによって参照される必要がありますか?また、それを管理するマネージャーの観点から、ポジション5が必要になります。

私が苦労しているもう1つの概念は、国のエクスポージャーの指標です。各証券は、国に関連する一定量のリスクを表しています。したがって、2つのポジションのポートフォリオでは、次のようになります。-100ドルのMV、セキュリティ国=英国-300ドルのMV、国=米国

ポートフォリオのカントリーエクスポージャーは、-100/400 = 25%英国、300/400 = 75%米国です。

この概念を設計に一般化するための最良の方法は何ですか?つまり、データを保存するのに最適な場所はどこですか?

4

1 に答える 1

1

ポートフォリオは、ポジションの母集団の任意のセグメンテーションを表すのに適しています。ポートフォリオの包含基準を指定する一般的な方法については、仕様パターン (pdf)も参照してください。実際、分析パターン(Martin Fowler) で説明されているポートフォリオパターンは、ドメイン駆動設計(Eric Evans)で説明されている仕様パターンと比較され ます。

現在、ポートフォリオは単にポジションの包含基準を表しています。実際にさまざまな方法でポジションを集計するには、エンタープライズ セグメントパターン (分析パターンで説明) を見てください。エンタープライズ セグメントは、ドメイン (あなたの場合はセキュリティ、マネージャー、ファンド) を構成するさまざまなディメンション要素のスライスであり、興味深い測定値を集計、計算、保存できます (市場価値や国へのエクスポージャーなど)。

また、 MoneyQuantityRangeなどのより基本的なパターンを確認してください。また、通貨の値または通貨計算のレートを格納するには、常に小数または整数を使用してください。

于 2012-05-08T02:03:03.163 に答える