At Cboe, I was a software engineer on the core trading systems that operated across three asset classes (U.S. Equities, Options and Futures). I was the primary maintainer for the order entry gateway, as well as working on the order routing system, handling the entry of orders to other exchanges. This was done in a heavily regulated environment in which time was measured at the microsecond level.
This role gave me experience with high-performance, low latency code on Linux systems. I also became familiar with several order entry protocols used in the industry. I worked primarily with standard FIX (Financial Information eXchange) and BOE (Binary Order Entry), Cboe’s proprietary binary protocol. I was the maintainer for the specifications and implementations of both protocols while at Cboe. I am also familiar with protocols such as NASDAQ’s OUCH.
One of the major projects I was involved in was the migration of the Cboe Futures Exchange (CFE) to a new technology platform. In 2017, Cboe acquired Bats Global Markets and began migrating to the Bats technology platform. My role in the project was to design and implement the required extensions and changes to the existing order entry protocols to support CFE on the Bats platform. This included adding support for 24/7 operation to the platform.
Another major project I worked on was the addition of Complex Options orders to the existing BZX and EDGX Options exchanges. I worked to design and implement the extensions to the FIX and BOE protocols to support the new order types, as well as assisting with the process to get trading members certified to send complex options orders.
I also implemented order routing between the Cboe exchanges using the faster BOE protocol instead of the FIX protocol. This reduced latencies for millions of daily routed orders by nearly 35% compared to FIX, an immediately noticeable change in the recorded metrics.
For all of these projects, I ensured their correctness through the use of unit tests and integration tests. This also included performance tests to check that the systems were not being slowed down by new features, as well as load testing to understand how the systems behaved under high stress.