C# 财务应用程序中的小数点位置不正确
我对编程相当陌生,开始学习C语言,这是我的第一个项目。我正在努力弄清楚为什么会出现奇怪的、看似随机的问题。这是一个相当简单的交易应用程序。基本上,它连接到websocket流,从交易所接收实时价格数据,然后实时评估价格并执行一些操作。价格每秒更新数百次,运行时没有问题,然后突然,我会得到一个价格值,比交易所发送的实际价格低数千美元。我终于实时捕捉到了这种情况。该应用程序已经运行了11个小时左右没有出现问题,然后坏值出现了 以下是相关代码:C# 财务应用程序中的小数点位置不正确,c#,.net,decimal,finance,trading,C#,.net,Decimal,Finance,Trading,我对编程相当陌生,开始学习C语言,这是我的第一个项目。我正在努力弄清楚为什么会出现奇怪的、看似随机的问题。这是一个相当简单的交易应用程序。基本上,它连接到websocket流,从交易所接收实时价格数据,然后实时评估价格并执行一些操作。价格每秒更新数百次,运行时没有问题,然后突然,我会得到一个价格值,比交易所发送的实际价格低数千美元。我终于实时捕捉到了这种情况。该应用程序已经运行了11个小时左右没有出现问题,然后坏值出现了 以下是相关代码: public static decimal Curren
public static decimal CurrentPrice;
// ...
if (BitmexTickerStreamIsConnected)
{
bitmexApiSocketService.Subscribe(BitmetSocketSubscriptions.CreateInstrumentSubsription(
message =>
{
foreach (var instrumentDto in message.Data)
{
if (instrumentDto.Symbol == "XBTUSD")
{
BitmexTickerStreamLastMessageReceived = DateTime.Now;
decimal LastPrice = instrumentDto.LastPrice.HasValue ? Convert.ToDecimal(instrumentDto.LastPrice) : CurrentPrice;
CurrentPrice = LastPrice;
}
}
}));
}
以下是断点被进一步按下后调试的值:
instrumentDto.LastPrice=7769.5
最后价格=7769.5
当前价格=776.9
问题是CurrentPrice似乎出于某种原因将小数点向左移动了一位。来自websocket的值很好,仅当CurrentPrice设置为LastPrice时,问题才会发生
我不知道为什么会发生这种情况,而且似乎完全是随机的
有人知道为什么会发生这种情况,或者是如何发生的吗
谢谢你的帮助 有两个常见原因:
- 由于市场数据的更新速度,偶尔会给出 根据提供程序,您可以更正错误数据。如果你是 直接从exchange消费您需要为此编写代码。一些 提供者(如)将为您筛选或标记错误标记
- 如果你一直看到这个问题,那是由于刻度大小之类的原因造成的 或规模。有些交易所的做法有所不同,但有效地帮助了你 需要将某些价格字段乘以一定的比例。咨询 有关详细信息,请参阅数据提供程序文档
CurrentPrice
decimal
是128位以10为基数的浮点,它大于当前的字大小(32或64位)
您可能需要同步对它的读写,这可以通过多种方式实现。尽管如此,上述信息仍然适用。有趣的是,在切换后的备用提要上出现了错误的滴答声。@GeorgeNewton如果您确实需要滴答声,几乎总是有办法在“重播”提要中请求它。正如您所说,通常最好放弃。只有在异国情调的十字架或类似的地方,滴答声可能在几分钟内出现。。“然后你很少会得到任何不好的数据。”乔治纳顿同意。除了描述为什么会发生这种情况外,我真的想告诉大家,您绝对需要保护自己免受不良数据的影响。的确如此。感谢@Zer0的详细回复。我肯定会采纳你的建议,并添加一个健全的检查,因为你永远不知道什么时候会得到坏数据,需要保护自己不受这些影响。也就是说,我发现奇怪的是,从交易所(instrumentDto.LastPrice)输入的勾号是正确的,只是在将变量CurrentPrice设置为该值时,问题似乎发生了。我的第一个想法是,这是来自交易所的坏数据,但它似乎是正确的。很奇怪