A few years ago, I worked on a type that could process
double values received as real-time market data updates and helped to convert them to be displayed for humans on a UI.
The type was used to process market data updates of U.S. Treasury Notes. The pricing of U.S. Treasury Notes is detailed on the cmegroup site. In this post I will focus on the pricing of bond and note products while keeping futures aside.
The prices of these products are displayed in fractions. The price of such a product may look as
99-032. This means it is 99 full points plus 3/32s of a point plus 2/8 of 1/32s of a point. The last digit of the price can take up values of
6, where plus denotes 4/8 or 1/2.Hence
99-032 equals 99 + 3/32 + 2/256 = 99.1015625. Note, that the last digit is always a multiple of 1/4th of a 1/32nd. Another example may be
100-23+ which equals 100.734375. However, this post will focus on displaying such data, converting it from a
double such as 100.734375 to
A few years back .NET was less performant. In this post, I will revisit the original implementation as well as review 3 implementations I would consider building today to take advantage of the performance benefits of the modern .NET. Even the original implementation is significantly faster when run on .NET 8 due to the number of optimizations that have been built into the BCL and the JIT.