证券交易所指数应该是双倍还是小数?

时间:2012-07-05 15:31:12

标签: c# real-time hft

我正在计算纳斯达克指数。

所有股票价格均为小数 我可以将重量减去十倍或两倍 - 这没关系。

nasdaq = weight1 * stock1 + weight2 * stock2 + .... + weightn * stockn。

由于股票价格为十进制,因此将纳达克指数设为十进制似乎是有意义的。但我不希望每次更新某些股票时重新计算纳斯达克指数。相反,我想“缓存”以前的值,然后只计算差异。例如,如果更改了stock2,则:

stock2OldPrice = stocks[2];
diff = stock2 - stock2OldPrice
nasdaq += diff * weight2     // need to synchronize
stocks[2] = stock2

现在我需要同步nasdaq索引,因为可以同时更新股票。例如,我可以并行线程接收MSFT和INTC的新价格。所以我必须写Interlocked.Add(ref nasdaq, diff * weight2);来引用我之前的问题how to synchronize addition from different threads using lock-free code?但我不能为decimal执行此操作,因为小数不受支持。

好的,我们可以尝试将nasdaq索引声明为double吗?有了双打,我可以做Interlocked.Add但现在又出现了另一个问题:因为每一步我将从十进制转换为双精度,我将失去精度。然后我的“智能缓存算法”将不会绝对“精确”。这意味着在我的索引的100 000 000更新值变得完全错误后,我无法处理它。

因此无法使用doubledecimal

我确实只看到一种可能的解决方案 - 我必须将nasdaq索引声明为decimal所以我可以继续使用我的“智能缓存算法”,所以我必须使用更复杂的“同步”机制,可能我有使用自旋锁。

你可以看到更简单的解决方案吗?

0 个答案:

没有答案