C# 外汇订单简化算法
这是一个几乎与语言无关的问题,而不是一个家庭作业。理想情况下,我会使用C#和/或SQL server作为解决方案 假设我有一个函数C# 外汇订单简化算法,c#,algorithm,sql-server-2008-r2,currency,graph-algorithm,C#,Algorithm,Sql Server 2008 R2,Currency,Graph Algorithm,这是一个几乎与语言无关的问题,而不是一个家庭作业。理想情况下,我会使用C#和/或SQL server作为解决方案 假设我有一个函数GetExchangeRate(buyCurrency,sellCurrency)。因此,如果1英镑相当于1.6美元,那么GetExchangeRate('GBP','USD')=1.6和GetExchangeRate('USD','GBP')=0.625 系统中的订单将表示为以下三元组:(buyCurrency、SellCurrency、buyCurrencyAmo
GetExchangeRate(buyCurrency,sellCurrency)
。因此,如果1英镑相当于1.6美元,那么GetExchangeRate('GBP','USD')=1.6
和GetExchangeRate('USD','GBP')=0.625
系统中的订单将表示为以下三元组:(buyCurrency、SellCurrency、buyCurrencyAmount)
。所以,('GBP','USD',125.00)意味着用多少美元购买125英镑
我的目标是节省交易成本,取消订单,包括传递性。将同一对货币之间的买卖净额结算是很容易做到的,也很容易证明这一点。让我们说,我可能有一个商业理由来简化订单,我用美元购买英镑,也用英镑购买欧元,等等
我想以传递的方式简化这组命令。我正在考虑构建一个图形数据结构(节点是货币,边是buyCurrencyAmounts),即使数据将存储在SQL表中,并对其应用正确的算法。我想先做一个简单的网格,然后在DAG上进行拓扑排序,然后从顶部开始,然后按照拓扑顺序进行遍历,并“压缩”顺序,例如简化它们
问题是我不一定会有一个DAG。但是,当我执行算法时,我可能会简化图形结构,无论哪一个
我应该为此使用什么样的数据结构/算法?我应该担心结果的准确性吗?有没有一些好的方法可以让我不损失分钱?你能推荐一个好的C#库来处理这个问题吗?仅使用SQL Server 2008进行此操作是否疯狂/效率低下/工作量过大
编辑:为交易支付的费用都包含在价格(汇率)中。没有固定的固定费用或类似的东西。在我看来,将交易集看作一个图形似乎过于复杂。只需在您的交易集中进行每笔交易并添加货币(即添加所有英镑买入/卖出、所有美元买入/卖出、欧元买入/卖出) 你最终得到了你想要的每种货币的净买入/卖出。然后根据最低价差开始挑选交易(即,如果您对欧元的价差最低,那么挑选一笔欧元交易-可能会使一些欧元或一些美元处于水平),继续…一种可能的技术是
- 从带有付款人、收款人、货币和金额列的发票表开始。这些对应于“净额结算前”情景中的流量
- 创建包含实体、货币和金额列的子付款临时表
- 遍历每个发票,为发票表中的每个付款人、货币、金额向临时表中添加一行李>
- 然后对收据执行相同操作,添加收款人、货币和负数李>
- 将子付款汇总为每个实体的货币小计
- 转换子付款总额(如有必要,应用差价)
- 临时表现在对应于“净额结算后”场景中的情况
(例如,法律问题:一些政府不允许在跨境交易中兑换外币;其他政府不允许您抵消付款和收款;一些需要中央银行的许可。一些有特殊要求的国家包括巴西、中国、马来西亚、俄罗斯等).是不是总是这样的
GetExchangeRates(A,B)*GetExchangeRates(B,A)==1
?@unkulunkulu,实际上有一个所谓的spre