これはほとんど言語にとらわれない質問であり、宿題ではありません。理想的には、解決策として C# や SQL サーバーを使用します。
関数 があるとしますGetExchangeRate(buyCurrency, sellCurrency)
。したがって、1 GBP が 1.6 USD の価値がある場合、GetExchangeRate('GBP', 'USD') = 1.6
とGetExchangeRate('USD', 'GBP') = 0.625
.
システム内の注文は、次のトリプレットとして表されます: (buyCurrency, SellCurrency, buyCurrencyAmount)
. したがって、('GBP', 'USD', 125.00) は、125 GBP を購入することを意味します。
私の目標は、取引コストを節約し、推移性を含めて注文をキャンセルすることです。同じ通貨ペア間の買いと売りをネッティングするのは簡単で、簡単に正当化できます。USD で GBP を購入し、GBP で EUR を購入するなどの注文を簡素化するビジネス上の理由があるとしましょう。
この一連の注文を推移的に単純化したい。データは SQL テーブルに格納されますが、グラフ データ構造 (ノードは通貨、エッジは buyCurrencyAmounts) を構築し、これに適切なアルゴリズムを適用することを考えていました。最初に単純なネッティングを行い、次に DAG でトポロジカル ソートを行い、次にトップから開始し、トポロジカルな順序で歩き、順序を「絞る」、たとえば単純化することを考えました。
問題は、必ずしも DAG があるとは限らないことです。しかし、アルゴリズムを実行するにつれて、グラフ構造を単純化する可能性が高くなります。
これに使用する必要がある正しいデータ構造/アルゴリズムは何ですか? 結果の精度について心配する必要がありますか? 私が行くときにセントを失わないための良いアプローチはありますか? これを処理できる優れた C# ライブラリをお勧めできますか? SQL Server 2008 のみを使用してこれを試みるのは、クレイジー/非効率的/多すぎる作業でしょうか?
編集:取引に支払われる手数料はすべて価格 (為替レート) に組み込まれています。固定の定額料金などはありません。