System and method for simultaneously reporting trade data of a trading event to participating client devices
Patent Information
- Application Number
- PCT/US2024/018382
- Authority / Receiving Office
- WO · WO
- Patent Type
- Applications
- Current Assignee / Owner
- Filing Date
- 2024-03-04
- Publication Date
- 2025-10-02
AI Technical Summary
Existing electronic asset trading systems face challenges in ensuring that trade data from a trading event is simultaneously received by all client devices of participating parties, due to differences in processing capabilities, memory resources, and network latencies, leading to potential unfair exploitation of asset trading information.
A system utilizing programmable integrated circuits, such as FPGAs, synchronized over a broadcast network to coordinate the distribution of trade notification messages, accounting for network latency, to ensure simultaneous or substantially simultaneous receipt of trade data across client devices.
The solution ensures that trade data is received simultaneously or nearly simultaneously across client devices, minimizing latency and bandwidth usage while reducing the risk of unfair information dissemination.
Smart Images

Figure US2024018382_02102025_PF_FP_ABST
Abstract
Description
SYSTEM AND METHOD FOR SIMULTANEOUSLY REPORTING TRADE DATA OF A TRADING EVENT TO PARTICIPATING CLIENT DEVICESTECHNICAL FIELD
[0001] The present disclosure generally relates to reporting trade data respectively of trades of a same trading event to parties involved in the trades and, in particular, providing that client devices respectively of parties involved in trades of a same trading event receive trade data specific to orders respectively of the parties from which the trades are created, at a same or substantially the same time.BACKGROUND
[0002] Computing devices of respective entities exchange data with other computing devices of other respective entities over communication networks for multitudes of applications. For example, a computing platform may report event data of an event, for example, a financial event, a news event or a sporting event, to multiple client devices. In various event data reporting implementations, it is desired that event data related to a same event that a computing platform reports to respective client devices, be received at a same or substantially the same time at each of the client devices.
[0003] In an electronic asset trading system, a matching engine or trading exchange may generate a trading event that includes trades involving multiple parties. For example, a matching engine may execute a sweep-to-fill order for a financial asset from a first participant, by filling all contra orders for the financial asset at a best price, all contra orders for the financial asset at a next best price, and so on, until the sweep-to-fill order is completely filled. When the trading event of the sweep-to-fill order is completed, the matching engine generates trade data respectively for the first participant and for second participants that respectively submitted the contra orders. The matching engine provides the trade data to a computing platform that, desirably with minimal delay, transmits the trade data to client devices respectively of the participants in the trades of the trading event. Each participant having an order filled to create a trade of the trading event desires to receive trade data concerning the filled order at a same time that other participants in trades of the trading event receive trade data respectively concerning filled orders, which avoids the potential for unfair exploitation of asset trading information by one participant who receives respective asset trading information of the trading event before another participant.
[0004] Some electronic asset trading systems are implemented by a computing platform which includes multiple computing devices that operate to transmit trade data of a same trading event to respective client devices. The computing devices desirably operate to transmit trade data to a client device, as soon as possible after receiving the trade data. Typically, a matching engine serially transmits trade data respectively of trades in a same trading event to the computing platform. The computing devices of the computing platform process the received trade data for a trading event, to provide that the trade data may be transmitted therefrom to respective client devices. Based on differences in processing and memory resource capability or availability at the respective computing devices, and also the trade data for the trading event being received serially at the computing platform, transmission of trade data for the trading event by one of the computing devices may occur at a different time than transmission of other trade data for the trading event by another of the computing devices. In addition, differences in network latencies associated with transmission of trade data from computing devices to respective client devices may cause different trade data for the same trading event, which are transmitted at a same time from the computing devices, to be received at different times at the respective client devices. Consequently, client devices may receive trade data respectively of filled orders of the trading event at different times from the computing platform, which is not desirable.
[0005] Accordingly, there exists a need for system, apparatus and method for electronic communication in communication networks that reports different trade data respectively of orders of parties involved in a same trading event which includes multiple trades created from filling the orders, to client devices respectively of the parties, to provide that the different trade data respectively of the filled orders are received at the same or substantially the same time by the client devices.SUMMARY
[0006] In accordance with an aspect of the present disclosure, a system may include a plurality of programmable integrated circuits communicatively coupled to each other over a broadcast network, in which each of the programmable integrated circuits includes at least one field programmable gate array (FPGA), in which each of the programmable integrated circuits is configured to: receive, from a matching engine, at least one trade message of a trading event, in which the trading event includes trades created by matching respective pairs of orders for a financial asset, in which each of the at least one trade message indicates an identifier of the tradingevent, trade data of a given order of a given customer filled to create a given trade of the trading event, a total number of orders filled for the trading event and an identifier of the given customer, and in which the given customer indicated in each of the at least one trade message received at the programmable integrated circuit is serviced by the programmable integrated circuit; for each of the at least one trade message for the trading event received at the programmable integrated circuit, generate a given trade notification message indicating given trade data of the given order of the given customer indicated in the at least one trade message; when the given trade notification message for the trading event is generated, cause broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a ready to send message for the trading event; receive, over the broadcast network, a ready to send message for the trading event; determine whether a number of ready to send messages for the trading event received over the broadcast network equals the total number of orders filled for the trading event; when the number of ready to send messages for the trading event received over the broadcast network is determined to be equal to the total number of orders filled for the trading event, cause broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a confirmation message for the trading event; receive, over the broadcast network, a first confirmation message for the trading event; and when the first confirmation message for the trading event is received, initiate distribution of each given trade notification message for the trading event generated at the programmable integrated circuit, in which the distribution includes transmitting the given trade notification message to a given client device of the given customer indicated in the given trade notification message and coupled to the programmable integrated circuit, accounting for network latency corresponding to transmission to the given client device.
[0007] In accordance with an aspect of the present disclosure, a method may be for controlling, by each programmable integrated circuit of a plurality of programmable integrated circuits of a system, in which the plurality of programmable integrated circuits is communicatively coupled to each other over a broadcast network, and in which each of the programmable integrated circuits includes at least one field programmable gate array (FPGA): receiving, from a matching engine, at least one trade message of a trading event, in which the trading event includes trades created by matching respective pairs of orders for a financial asset, in which each of the at least one trade message indicates an identifier of the trading event, trade data of a given order of a given customer filled to create a given trade of the trading event, a total number of orders filled for the tradingevent and an identifier of the given customer, and in which the given customer indicated in each of the at least one trade message received at the programmable integrated circuit is serviced by the programmable integrated circuit; for each of the at least one trade message for the trading event received at the programmable integrated circuit, generating a given trade notification message indicating given trade data of the given order of the given customer indicated in the at least one trade message; when the given trade notification message for the trading event is generated, causing broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a ready to send message for the trading event; receiving over the broadcast network, a ready to send message for the trading event; determining whether a number of ready to send messages for the trading event received over the broadcast network equals the total number of orders filled for the trading event; when the number of ready to send messages for the trading event received over the broadcast network is determined to be equal to the total number of orders filled for the trading event, causing broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a confirmation message for the trading event; receiving, over the broadcast network, a first confirmation message for the trading event; and when the first confirmation message for the trading event is received, initiating distribution of each given trade notification message for the trading event generated at the programmable integrated circuit, in which the distribution includes transmitting the given trade notification message to a given client device of the given customer indicated in the given trade notification message and coupled to the programmable integrated circuit, accounting for network latency corresponding to transmission to the given client device.BRIEF DESCRIPTION OF THE DRAWINGS
[0008] FIG. 1 is a block diagram of an exemplary system, according to the present disclosure.
[0009] FIG. 2 is a block diagram of an exemplary apparatus, according to the present disclosure.
[0010] FIG. 3 is a block diagram of an exemplary apparatus, according to the present disclosure.
[0011] FIGs. 4A and 4B illustrate an exemplary high level flow diagram of an exemplary method of reporting different trade data respectively of orders of customers involved in a same trading event including multiple trades, according to the present disclosure.
[0012] FIG. 5 illustrates an exemplary high level flow diagram of an exemplary method of reporting different trade data respectively of orders of customers involved in a same tradingevent including multiple trades when a delay condition is determined, according to the present disclosure.
[0013] FIG. 6 is a table illustrating an example of reporting trade data of a trading event, according to the present disclosure.
[0014] FIG. 7 illustrates an exemplary high level flow diagram of an exemplary method of reporting different trade data respectively of orders of customers involved in a same trading event including multiple trades, based on an event time of the trading event, according to the present disclosure.DETAILED DESCRIPTION
[0015] For ease of reference in highlighting the features of the present disclosure, a user that is a subscriber to an electronic asset trading service implemented by a computing platform that reports to the user trade data specific to an order for an asset of the user, such as an order to buy or sell a financial asset, that is filled to create a trade, is referred to herein as a customer; and a customer having an order filled to create a trade of a trading event including multiple trades, is referred to herein as a customer involved in the trading event.
[0016] The technology of the present disclosure relates to, by way of example, a computer and networking architecture that may control reporting of different trade data respectively of trades of a trading event, from a computing platform that receives the different trade data and implements an electronic asset trading service, to customers involved in the trading event, where the reporting ensures simultaneous or substantially simultaneous receipt, from computing devices respectively of the computing platform, of the different trade data of the trading event at client devices respectively of the customers. The computing platform may include computing devices as order gateways that coordinate with each other to control transmission of trade notification messages indicating different trade data respectively of customers involved in the trading event, to client devices respectively of the customers, to provide that the trade notification messages for the trading event are received at the same or substantially the same time respectively at the client devices.
[0017] In one embodiment, the computing system may include an architecture containing a plurality of order gateways, where each order gateway includes at least one programmable hardware device, for example, a field programmable gate array (FPGA), and at least one processor. The computing system may include a broadcast device communicatively coupled to each of the order gateways, and a computing device as a matching engine that generates a trading eventincluding trades created from filling orders for a financial asset respectively of customers. For example, the trading event may include trades created from filled orders for a financial asset based on a single order of a sweep-to-fill order for the financial asset. The matching engine may determine an event time for a trading event based on a time of a system electronic clock (“system clock”) of the computing system when the trading event is generated. The matching engine may generate, for each trading event, a trade message for each order of a customer filled to create a trade included in the trading event. A trade message may indicate trade data specific to an order of a customer filled to create a trade of a trading event and an identifier of the customer. In addition, each trade message may indicate an identifier of a trading event including a trade indicated in the trade message, a total number of orders filled to create the trades in the trading event (“total number orders filled for the trading event”) and an event time of the trading event. The matching engine may transmit the trade messages for the trading event to order gateways which are coupled to client devices respectively of customers indicated in the trade messages and serviced by the order gateways. For each trade message received at an order gateway, the order gateway may generate a trade notification message indicating trade data of an order of a customer filled to create a trade indicated in the trade message. The order gateways may coordinate with each other to synchronize initiation of distribution of all trade notification messages for a trading event generated by the computing system. After distribution is initiated for a trading event, the order gateways may transmit the trade notification messages for the trading event to client devices respectively of the customers, accounting for differences in network latencies associated with transmissions respectively to the client devices, to provide that the trade notification messages for the trading event are received respectively at the client devices at the same or substantially the same time.
[0018] In one embodiment, initiation of distribution of trade notification messages for a trading event may be synchronized as follows. After an order gateway generates a trade notification message for a trading event, the order gateway may cause a broadcast device of the computing system to broadcast, to all order gateways of the computing system, a ready to send message indicating an identifier of the trading event (“ready to send message for the trading event”). Each order gateway may receive a ready to send message for the trading event, and determine when the number of ready to send messages for the trading event received at the order gateway equals the total number of orders filled for the trading event. When an order gatewaydetermines that the number of ready to send messages received for the trading event equals the total number of orders filled for the trading event, the order gateway may cause the broadcast device to broadcast, to all the order gateways, a confirmation message indicating an identifier of the trading event (“confirmation message for the trading event”). Each order gateway may receive a confirmation message for a trading event from the broadcast device. When an order gateway for a first time receives a confirmation message (“first confirmation message”) for a trading event, the order gateway may initiate distribution of the trade notification messages for the trading event generated at the order gateway. As all order gateways desirably may receive a first confirmation message for a same trading event at the same time from the broadcast device, the order gateways may initiate distribution of trade notification messages for the same trading event therefrom at the same time, and advantageously cause transmission of the trade notification messages for the same trading event from the order gateways to client devices respectively of customers indicated in the trade notification messages, accounting for network latency differences, to provide that the trade notification messages for the same trading event are received at a same or substantially the same time at the client devices respectively of the customers.
[0019] In one embodiment, when distribution is initiated for a trading event, an order gateway may determine whether a distribution time for a trade notification message for the trading event generated at the order gateway is satisfied, and cause transmission of the trade notification message to a client device of a customer indicated in the trade notification message when the distribution time for the trade notification message is determined to be satisfied. A distribution time for a trade notification message for a trading event may be equal to a sum of a time of an electronic clock of the computing system when a first confirmation message for the trading event is received at an order gateway, and a network latency offset associated with transmission of the trade notification message to a client device of the customer indicated in the trade notification message. In one embodiment, a time that a first confirmation message for a trading event is received at an order gateway (“first confirmation time”) is determined based on a time of a local electronic clock (“local clock”) of the order gateway. In one embodiment, a network latency offset may be a propagation delay offset that equalizes differences in propagation delays associated with respective communication paths extending from programmable hardware devices respectively of order gateways from which trade notification messages are transmitted to client devices of respective customers. A distribution time for a trade notification message may be satisfied whena current time of the local clock is equal to or after the distribution time for the trade notification message.
[0020] In one exemplary embodiment, an order gateway of the computing system may include an FPGA configured according to configuration information. The configuration information may indicate client devices respectively of customers coupled to the FPGA, and hardware interconnections within the FPGA that facilitate reporting of trade notification messages for a trading event to the client devices respectively of the customers indicated in the trade notification messages. For ease of reference, a customer having a client device that is communicatively coupled to an order gateway, so as to receive a trade notification message indicated for the customer transmitted from the order gateway, may be referred to herein as a customer serviced by the order gateway. The FPGA may control: generating, based on a trade message received from a matching engine, a trade notification message indicating trade data of an order of a customer filled to create a trade of a trading event indicated in the trade message; routing a trade notification message through the FPGA to a message delivery circuit coupled to a client device of a customer indicated in the trade notification message; based on generation of a trade notification message, causing a broadcast device of the computing system to broadcast a ready to send message for the trading event to all order gateways of the computing system; receiving from the broadcast device a ready to send message for the trading event; causing the broadcast device to broadcast a confirmation message for the trading event to all the order gateways, when the total number of ready to send messages for the trading event received at the order gateway equals the total number of orders filled for the trading event; receiving from the broadcast device a confirmation message for the trading event; initiating distribution of trade notification messages for a trading event generated at the FPGA, when a first confirmation message for the trading event is received at the FPGA; and when distribution is initiated for a trading event, transmitting a trade notification message for the trading event from a message delivery circuit of the FPGA to a client device corresponding to a customer indicated in the trade notification message, when a distribution time of the trade notification message is determined to be satisfied, where the distribution time is based on a time of a local clock of the order gateway when the first confirmation message for the trading event is received and accounts for any network latency offset corresponding to the client device.
[0021] In one embodiment, an FPGA of an order gateway may include a network interface, a trade data processing circuit, a distribution circuit and a plurality of message delivery circuits. The network interface may receive, from a matching engine, a trade message including trade data of an order of a customer involved in a trading event and serviced by the order gateway. The trade message may indicate identifiers of the customer and trading event, a total number of orders filled for the trading event and an event time for the trading event. The event time may be based on a time of the system clock when the trading event is generated. The trade data processing circuit may (i) generate a trade notification message indicating trade data of an order of a customer involved in the trading event indicated in a trade message, and (ii) based on configuration information for the FPGA, route the trade notification message to the distribution circuit in a feed corresponding to the customer indicated in the trade notification message. The distribution circuit may route a trade notification message in a feed, to a message delivery circuit communicatively coupled to a client device of a customer indicated in the trade notification message. The message delivery circuits may receive trade notification messages routed from the distribution circuit, and be communicatively coupled over communication paths respectively to client devices of the customers indicated in the trade notification messages. The distribution circuit may coordinate with distribution circuits of FPGAs respectively of other order gateways of the computing system, to determine when distribution of trade notification messages for the trading event is initiated at all order gateways that receive trade messages for the trading event. When distribution is initiated for a trading event, the distribution circuit may cause transmission of trade notification messages for the trading event respectively from message delivery circuits, when distribution times respectively of the trade notification messages are satisfied. The distribution circuit may determine a distribution time for a trade notification message, based on a time when distribution is initiated for the trading event and a network latency offset corresponding to transmission of the trade notification message. The distribution circuit may determine whether a distribution time for a trade notification message for the trading event is satisfied, based on a comparison of a current time of the local clock with the distribution time. When a distribution time for a trade notification message is determined to be satisfied, the distribution circuit may cause a message delivery circuit, to which the trade notification message was routed, to transmit the trade notification message to a client device that is coupled to the message delivery circuit over a communication path. In one embodiment, a network latency offset for a trade notification message may include a propagationdelay offset corresponding to a communication path extending from a message delivery circuit to a client device of a customer indicated in the trade notification message.
[0022] It is to be understood that the features in accordance with the present disclosure may be applied to reporting, with equalization of differences in network latencies, of event data other than asset trading data from multiple computing devices of a computing system to respective client devices in applications requiring simultaneous or substantially simultaneous receipt of event data of a same event at multiple client devices, such as, for example, real-time streaming of video or audio data, such as in interactive multi-player games, or event data from sensors, such as sensors in an internet of things (“IOT”) network including health device sensors, traffic device sensors, etc.
[0023] The present disclosure may be implemented using a combination of computer hardware and computer software to form a specialized machine capable of performing operations. Embodiments of the present disclosure may be performed utilizing a combination of central processing units (CPUs), physical memory, physical storage, electronic communication ports, electronic communication lines and other computer hardware. The computer software may include at least a computer operating system and specialized computer processes described herein.
[0024] In the present disclosure, certain specific details are set forth to provide a thorough understanding of various disclosed embodiments. However, one skilled in the relevant art will recognize that embodiments may be practiced without one or more of these specific details, or with other methods, components, etc. In other instances, well-known structures associated with an electronic asset trading system have not been shown or described in detail to avoid unnecessarily obscuring descriptions of the embodiments.
[0025] The aspects, features and advantages of the present disclosure will be appreciated when considered with reference to the following description of examples and accompanying figures. In describing the exemplary embodiments of the disclosure illustrated in the drawings, specific terminology will be used for the sake of clarity. However, the disclosure is not intended to be limited to the specific terms used.Example Systems
[0026] FIG. 1 illustrates a block diagram of an exemplary computing system 10, in accordance with the present disclosure. The computing system 10 may be communicatively coupled over a communication network 12 to a plurality of computing devices 12 as client devicesrespectively of customers of the computing system 10. The computing system 10 may include a computing device 16 as a matching engine coupled over a communication network 18 to a plurality of computing devices 20 as order gateways. In addition, the computing system 10 may include a broadcast device 22 coupled over a broadcast network 24 to each of the order gateways 20. The computing system 10 may further include a controller 26 which is communicatively coupled to components within the computing system 10, and which may be communicatively coupled with the client devices 14 and other devices external to the computing system 10.
[0027] In one embodiment, the computing system 10 may receive an order for an asset from a customer; provide the order to the matching engine 16 for matching with another order of another customer, where the order and the another order are filled to create a trade of a trading event generated at the matching engine 16, and where the trading event includes multiple trades created from filled orders; and transmit, from an order gateway 20, trade data of a trade created from a filled order of a customer involved in the trading event, to a client device 14 of the customer coupled to the order gateway 20. Advantageously, as discussed in detail below, the computing system 10 may provide that each customer involved in a trading event including multiple trades generated at the matching engine 16 may receive, at a client device 14 of the customer, from an order gateway 20 of the computing system 10 that services the customer, a trade notification message for the trading event indicating trade data specific to an order of the customer filled to create a trade of the trading event, at the same time or substantially the same time.
[0028] In one embodiment, the computing system 10 may receive orders of customers from computing devices, such as the client devices 14, of the customers communicatively coupled to the computing system 10. The customers may be, for example, traders or brokers. In one embodiment, an order may be generated by a computing device of the customer.
[0029] The trade data for a trading event may indicate trade details of an order for an asset of a customer filled by matching to another order for the asset to create a trade for the asset, where the trade may be executed at the matching engine 16 or another computing device coupled to the computing system 10. The asset may be, for example, an equity, a bond, a treasury or cryptocurrency.
[0030] In one embodiment, the computing device 16 may be a trading exchange or like entity that matches orders of respective customers, and generates and executes trades from the matched orders, resulting in filled orders.
[0031] The communication network 12 may be a communication network having predetermined network characteristics, such as bandwidth, communication protocol, communication paths and communication path lengths, and include a local area network (“LAN”), wide area network (“WAN”), virtual private network, local Ethernet network, a private network using a proprietary communication protocol or like network. The communication network 18 may be a LAN, WAN, virtual private network, local Ethernet network, private network using a proprietary communication protocol or like network. The communication networks 12 and 18 and intervening nodes thereof may use various communication protocols. In addition, the networks 12 and 18 may utilize a variety of networking protocols now available or later developed.
[0032] In one embodiment, the computing system 10 may include a portion of the communication network 12 and / or one or more of the client devices 14.
[0033] The broadcast device 22 may be configured to receive from an order gateway 20 an instruction to broadcast a message for a trading event and, based on the instruction, generate and, broadcast over the broadcast network 24 to all order gateways 20, a message for the trading event. An order gateway 20 may transmit the instruction to the broadcast device 22 over the broadcast network 24. In one embodiment, an instruction to broadcast a message for a trading event may include or be the message for the trading event that the broadcast device 22 broadcasts to the order gateways 20.
[0034] The broadcast network 24 may be, for example, a LAN or another network suitable for broadcasting messages to multiple devices.
[0035] An order gateway 20 may be configured to cause the broadcast device 22 to broadcast to all order gateways a ready to send message for a trading event and a confirmation message for a trading event. An order gateway 20 may be configured to receive a ready to send message for a trading event and a confirmation message for a trading event, and based on the receipt of messages for a trading event, determine whether and when to initiate distribution of trade notification messages for the trading event generated at the order gateway 20.
[0036] In one embodiment, an order gateway 20 may be configured to cause the broadcast device 22 to broadcast to all order gateways a delay condition message for a trading event, when a predetermined time interval elapsed since an event time of the trading event and a delay condition for the trading event is determined to exist at the order gateway 20. Further in this embodiment, an order gateway 20 may be configured to receive a delay condition message for a trading event,and based on receipt of the delay condition message, initiate distribution of trade notification messages for the trading event generated at the order gateway 20. A delay condition for a trading event may be determined to exist at a given order gateway when, for example, within a predetermined time interval immediately after an event time of the trading event, trade notification messages for a trading event, which are for all orders of customers involved in the trading event and serviced by the given order gateway, are not generated at the given order gateway, or the given order gateway does not receive a confirmation message for the trading event.
[0037] In one embodiment, an order gateway 20 may be configured to coordinate with other order gateways 20 of the computing system 10, via the broadband device 22, to synchronize initiation of distribution of trade notification messages for a trading event respectively for customers involved in the trading event at multiple order gateways 20, such that the trade notification messages for the trading event are transmitted from the multiple order gateways 20 to be received at client devices 14 respectively of the customers at the same or substantially the same time. The transmission of trade notification messages for a trading event over respective communication paths of the network 12 to the client devices 14, based on synchronizing initiation of distribution of the trade notification messages and with network latency equalization, according to the present disclosure, advantageously facilitates receipt, processing and reporting of different trade data of a trading event to client devices of respective customers with low latency and minimizes usage of communication network bandwidth, processing and memory resources, as described in detail below.
[0038] Referring to FIG. 2, in one embodiment, an order gateway 20 of the computing system 10 may be in the form of a computing device that includes one or more processors 32, one or more memory 34 and other components commonly found in computing devices. In one embodiment, the one or more processors 32 may include or be configured to operate as one or more servers.
[0039] The memory 34 may store information accessible by the one or more processors 32, including instructions 36 that may be executed by the one or more processors 32.
[0040] The one or more processors 32 may include an architecture configured to include a programmable hardware device, such as a programmable integrated circuit or reprogrammable logic device, for example, a field programmable field array (“FPGA”), an application specific integrated circuit (“ASIC”) or system on chip (“SoC”). In one embodiment, the architecture maybe hardwired on a substrate. In one embodiment, the one or more processors 32 may include any type of processor, such as a CPU from Intel, AMD, and Apple.
[0041] Memory 34 may also include data 38 that can be stored, manipulated or retrieved by the processor. The data 38 may also be used for executing the instructions 36 and / or for performing other functions. The memory 34 may be any type of non-transitory media readable by the one or more processors, such as a hard-drive, solid state hard-drive, memory card, ROM, RAM, DVD, CD-ROM, write-capable, read-only memories, etc.
[0042] The instructions 36 may be any set of instructions capable of being read and executed by the one or more processors 32. The instructions may be stored in a location separate from a computing device, such as in a network attached storage drive, or locally at the computing device. The terms “instructions,” “functions,” “application,” “steps,” and “programs” may be used interchangeably herein. The instructions residing in a non-transitory memory may comprise any set of instructions to be executed directly (such as machine code) or indirectly (such as scripts) by processor 32. In this regard, the terms “instructions,” “scripts,” or “modules” may be used interchangeably herein. The computer executable instructions may be stored in any computer language or format, such as in object code or modules of source code. Furthermore, it is understood that the instructions may be implemented in the form of hardware, software, or a combination of hardware and software and that the examples herein are merely illustrative.
[0043] Data 38 may be stored, retrieved and / or modified by the one or more processors 32 in accordance with the instructions 36. Such data may be stored in one or more formats or structures, such as in a relational or non-relational database, in a SQL database, as a table having many different fields and records, XLS, TXT, or XML documents. The data may also be formatted in any computing device-readable format. In some embodiments the data may be encrypted.
[0044] The order gateway 20 may include a communication device 39 configured to provide wired or wireless communication capabilities.
[0045] FIG. 2 illustrates the components of the order gateway 20 as being single components, however, the components may comprise multiple programmable hardware devices such as FPGAs, processors, computers, computing devices, or memories that may or may not be stored within the same physical housing. For example, the memory may be a hard drive or other storage media located in housings different from that of the order gateway 20. Accordingly, references to a programmable hardware device, processor, computer, computing device or memoryherein will be understood to include references to a collection of processors, computers, computing devices, or memories that may or may not operate in parallel. Further, although some functions described below are indicated as taking place on a single computing device having a single processor, various aspects of the subject matter described herein may be implemented by a plurality of computing devices in series or in parallel. For example, in one embodiment, functions performed by the order gateway 20 as described below may at least be partially performed at another computing apparatus having the same or similar components as the order gateway 20.
[0046] Although only a single computing apparatus (computer) is depicted herein as the order gateway 20, it should be appreciated that an order gateway in accordance with the present disclosure may include additional interconnected computers and reprogrammable hardware devices, such as FPGAs.
[0047] Referring to FIG. 1, the computing system 10 may include multiple order gateways 20, each of which may constitute an individual node in a network containing a larger number of computers.
[0048] In one embodiment, the computing system 10 or any of its components may include all the components normally used in connection with a computer. For example, an order gateway 20 may have a keyboard and mouse and / or various other types of input devices such as pen-inputs, joysticks, buttons, touch screens, etc., as well as a display, which could include, for instance, a CRT, LCD, plasma screen monitor, TV, projector, etc.
[0049] The controller 26 may include a processor, a memory and communication capabilities. The controller 26 may be configured to perform operations as described below, which include controlling operations performed by other components of the computing system 10.
[0050] In one embodiment, functions described herein as performed by one or more components of the computing system 10 may be distributed among one or more computing devices (servers) that operate as a cloud system.
[0051] In some embodiments, one or more of the order gateways 20, or the controller 26, may be programmed with programs to perform some or all of the functions and operations described herein.
[0052] For purposes of highlighting and illustrating the features of the present disclosure, an exemplary order gateway 120, as shown in FIG. 3, to implement specific functions and operations in accordance with the present disclosure is described below. It is to be understood thatthe order gateway 120 is representative of, and may have a same or similar structure and operation as, an order gateway 20 of the computing system 10 of FIG. 1. To highlight the features of the present disclosure, the order gateway 120 is illustrated in FIG. 3 with selected components of the computing system 10, and the operation of the order gateway 120 is described with respect to operations of other components of the computing system 10 as shown in FIG. 1. In the illustrated exemplary embodiment, the order gateway 120 may include a programmable integrated circuit as or including an FPGA, as described below.
[0053] The order gateway 120 may be configured to implement an electronic asset trading service of the computing system 10 that reports trade data specific to a filled order of a customer involved in a trading event and serviced by the order gateway 120, where the trading event includes trades created from filled orders of respective customers. For example, the trading event may be generated from trades created by matching a single order of a single customer that is a sweep-to- fill order, with contra orders respectively of multiple customers. The trade data for the trading event may indicate trade details of the trades created from filling respective portions of the single order of the single customer, and trade details of each trade created from filling each contra order of another customer matched with a portion of the single order.
[0054] The order gateway 120 may be configured to generate a trade notification message indicating trade data specific to an order of a customer involved in a trading event. A trade notification message may indicate, for example, price of an asset in a trade, quantity of the asset in the trade, an identifier of a customer that submitted an order which is filled to create the trade, details of the order, an identifier of a trading event that is generated from and includes the trade, an identifier of a matching engine at which the trading event is generated, an event time of the trading event, etc.
[0055] Referring to FIG. 3, the order gateway 120 may include a server 132 including a processor 134, a memory 136 and a communication interface 138. The memory 136 may be configured to store: instructions to implement specific functions and operations; and data related to processing trade data of an order of a customer involved in a trading event and transmitting a trade notification message including the trade data of the customer, to a client device 180 of the customer, in accordance with the present disclosure. The communication interface 138 may include components that provide network communication capabilities. In one embodiment, the server 132 may be communicatively coupled with the matching engine 16 and the controller 26 ofthe computing system 10. In addition, the server 132 may be communicatively coupled with client devices 180 external to the order gateway 120.
[0056] In one embodiment, each of the components of the order gateway 120 may include a processor and a memory including instructions that implement functions of the respective component, as described below.
[0057] For ease of reference and convenience, the disclosure herein that the server 132 or another component of the order gateway 120 may perform a function or operation, is a disclosure that a processor or circuitry of the server 132 or the another component of the order gateway 120 may perform or control the performance of the function or operation.
[0058] The order gateway 120 may include a network interface 140, a data path 142, a trade data processing circuit 150 including feed ports 154, data paths 152, a distribution circuit 160, data paths 162 and message delivery circuits 170. The server 132 may be communicatively coupled with the network interface 140, the trade data processing circuit 150, the distribution circuit 160 and the message delivery circuits 170.
[0059] The message delivery circuits 170 may be communicatively coupled respectively to client devices 180 over communication paths 172. The order gateway 120 may include at least a portion of the communication paths 172. In one embodiment, each message delivery circuit 170 may be communicatively coupled over a communication path 172 to a single client device 180. In one embodiment, each communication path 172 may be a communication path independent of any other communication path 172.
[0060] The network interface 140 may be communicatively coupled with the matching engine 16 over the communication network 18 (see FIG. 1).
[0061] Referring to FIGs. 1 and 3, the order gateway 120, as an order gateway 20 of the system 10 that services a given customer, may transmit a given trade notification message for the given customer to a given client device 180 of the given customer. Referring to FIG. 3, a given message delivery circuit 170 of the order gateway 120 may be coupled to the given client device 180 of the given customer over a given communication path 172 on which the given trade notification message for the given customer is transmitted to the given client device 180.
[0062] In one embodiment, specific functions and operations of the network interface 140, the trade data processing circuit 150, the distribution circuit 160 and the message delivery circuits 170, in accordance with the present disclosure, may be desirably executed in a programmable 1hardware device, such as in an FPGA, although it is to be understood that some or all of the functions and operations may be executed in software.
[0063] In an exemplary embodiment, the order gateway 120 may be configured as or to include a single FPGA. The FPGA may include the network interface 140, the data path 142, the trade data processing circuit 150, the data paths 152, the distribution circuit 160, the data paths 162 and the message delivery circuits 170. In addition, the FPGA may include at least a portion of the memory 136, and at least a portion of the communication paths 172.
[0064] The memory 136 may store configuration information of the computing system 10 specific to the order gateway 120. The configuration information specific to the order gateway 120 may be based on customers serviced by the order gateway 120. The configuration information may indicate: customers having respective client devices 180 coupled to the order gateway 120; interconnections among the feed ports 154, the data paths 152, the data paths 162 and the message delivery circuits 170 within the FPGA; and the client devices 180 of the customers respectively coupled over communication paths 172 to message delivery circuits 170. The interconnections within the FPGA may provide that trade notification messages of specific feeds for respective customers serviced by the order gateway 120 may be routed within the FPGA to message delivery circuits 170 coupled to client devices 180 respectively of the customers.
[0065] Based on the configuration information for the order gateway 120, a trade notification message for a predetermined client device 180 of a customer may be routed within the FPGA, over a predetermined data path 152 and a predetermined data path 162, to a predetermined message delivery circuit 170, which transmits the trade notification message over a predetermined communication path 172 only to the predetermined client device 180.
[0066] It is to be understood that, for each customer serviced by the computer system 10, a client device of the customer may be communicatively coupled to a specific order gateway 20 over a predetermined communication path on which trade notification messages for the customer are transmitted to the client device.
[0067] Referring to FIG. 3, the order gateway 120 may include the trade data processing circuit 150 including feed ports 154A, 154B,...154K, the data paths 152A, 152B,... 152K, the data paths 162A, 162B ...162K and the message delivery circuits 170A, 170B, ...170K. In addition, the order gateway 120 may include portions of communication paths 172A, 172B,...172K extending respectively from the message delivery circuits 170A, 170B,...170K.
[0068] Referring to FIG. 3, in accordance with the configuration information for the order gateway 120, the feed ports 154A, 154B,...154K may be communicatively coupled over respective data paths 152A, 152B,...152K to the distribution circuit 160. Each data path 152 may route a specific feed of trade notification messages to the distribution circuit 160. The trade notification messages in a specific feed are for transmission to a specific client device 180 which is of a specific customer to which the specific feed corresponds, in accordance with the configuration information. For example, the trade data processing circuit 150 may route distinct feeds A, B,...K of trade notification messages containing trade data of orders of respective distinct customers that were filled to create trades of a trading event, from the feed ports 154A, 154B,... 154K respectively over the data paths 152A, 152B,... 152K. The trade notification messages for a same trading event in respective feeds, such as feeds A, B and C, may have different trade data of different customers A, B and C, and be for transmission to client devices 180A, 180B and 180C, respectively, of the customers A, B and C.
[0069] In accordance with the configuration information, the distribution circuit 160 may route trade notification messages on feeds A, B,...K received from the trade data processing circuit 150 on the data paths 152A, 152B,...152K, respectively, over data paths 162A, 162B,...162K to the message delivery circuits 170A, 170B,...170K, respectively.
[0070] Also in accordance with the configuration information, the message delivery circuits 170A, 170B,...170K may be communicatively coupled over data paths 172A, 172B,...172K, respectively, to the client devices 180A, 180B,...180K.
[0071] In one embodiment, for a trade notification message on a feed received at the distribution circuit 160, the distribution circuit 160 may route the trade notification message from a data path 152, without delay, on to a data path 162 extending to a message delivery circuit 170 that is communicatively coupled to a client device 180 corresponding to a customer indicated in the trade notification message.
[0072] In one embodiment, one or more of the client devices 180 may be a laptop, desktop or mobile computing device, such as a smartphone or tablet. The one or more client devices may execute an “app” to interact with the computing system 10, and / or an order gateway 120 that services the customer to which the client device 180 corresponds. The app, for example, may execute on a mobile device operating system, such as Apple Inc.’s iOS®, Google Inc.’s Android®, or Microsoft Inc.’s Windows 10 Mobile®, which provides a platform that allows the app tocommunicate with particular hardware and software components of the mobile device. For example, the mobile device operating system may provide functionalities for interacting with location services circuitry, wired and wireless network interfaces, user contacts, and other applications, where the functionalities include application programming interfaces (APIs) that enable communication with hardware and software modules executing outside of the app, such as included in the computing system 10. In one embodiment, a client device 180 may, via the app executing on the client device 180, be configured to communicate with the computing system 10 via a communication interface of the controller 26, or the communication interface 138 of the server 132.
[0073] The matching engine 16 may have communication capabilities, and be configured to generate a trade message indicating trade data specific to an order of a customer involved in a trading event, where the trading event is generated based on operations performed by the matching engine 16. Each trade message may indicate the total number of orders filled for the trading event, an identifier of the trading event and an identifier of the customer indicated in the trade message.
[0074] For example, the trading event may include trades created from filling several orders for a financial instrument that are matched with a single contra order for a financial instrument, such as would occur in completing a sweep-to-fill order. The trading event may be generated from a first order of a first customer that is a sweep-to-fill order, and second orders of respective second customers that are matched to the first order, where the second orders are filled to create respective trades that complete the sweep-to-fill order and, together, form the trading event. In one embodiment, several different first portions of the first order may be filled to create respective trades, which together completely fill the first order and result in generation of the trading event including the trades. The trade data for the first order of the first customer for the trading event may indicate: an identifier of the first customer; an identifier of the trading event; an asset that is the subject of the trading event; a portion of the first order which is filled, based on matching to a second order of a second customer, to create one trade of the trades that form the trading event; price of the asset in the one trade; size of the asset in the one trade; and a matching engine at which the one trade was executed. In addition, the trade data for the second order of a second customer for the trading event may indicate: an identifier of the second customer; an identifier of the trading event; an asset that is the subject of the trading event; the second order of the second customer which is filled based on matching to a portion of the first order, to create onetrade of the trades of the trading event; price of the asset in the one trade; size of the asset in the one trade; and a matching engine at which the one trade was executed.
[0075] The server 132, or the controller 26, may provide to the matching engine 16, from a memory of the order gateway 120, such as the memory 136, network address information of the order gateway 120 that services a specific customer, based on the configuration information for the computing system 10. The network address information may provide that only the network interface 140 of the order gateway 120 that services a customer indicated in a trade message receives the trade message from the matching engine 16.
[0076] The matching engine 16 may transmit a trade message for a trading event for receipt only by an order gateway 20 of the computing system 10 that services a customer indicated in trade data of the trade message. Each trade message may indicate network address information of a specific order gateway 20 that services the customer indicated in the trade message. In one embodiment, the trade message for an order of a first customer involved in a trading event may not include trade details of any other order of any other customer involved in the trading event. For example, trade data in a trade message may include trade details of an order A of a customer A from which a trade AB is created from matching the order A with an order B of a customer B, and not include any details of the order B of the customer B.
[0077] The matching engine 16 may generate a trade message indicating trade data for a trading event at different times, such that trade messages respectively for specific orders of customers involved in the trading event are generated at different times. The matching engine 16 may serially transmit trade messages for a trading event indicating trade data of specific orders respectively of customers involved in the trading event, as the trade messages are generated, such that the order gateways 20 may at different times receive trade messages for the trading event for respective customers serviced.
[0078] In one embodiment, a trade message may indicate an event time for the trading event. The event time may correspond to a time of a system electronic clock (“system clock”) of the computer system 10 when the trading event is generated at the matching engine 16.
[0079] The server 132 of the order gateway 120, or a processor of the controller 26, may be configured to include and control an electronic clock as the system clock that electronically times at increments of nanoseconds. The server 132 or the controller 26 may supply the matching engine 16 with a current time of the system clock. The matching engine 16 may determine anevent time of a trading event, based on a time of the system clock when the trading event is completed.
[0080] In one embodiment, the matching engine 16 may include and operate a local electronic clock whose time is based on or corresponds to a time of the system clock of the computing system 10. In one embodiment, the time of the local electronic clock of the matching engine may be synchronized with the time of the system clock. In one embodiment, the event time for a trading event may be determined based on a time of the local electronic clock of the matching engine 16 when a trading event is generated, such as at the matching engine 16.
[0081] For example, a sweep-to-fill order completely filled by the matching engine 16 may include a sweep-to-fill order A of a customer A matched with contra orders B, C and D respectively of customers B, C and D. The completion of the sweep-to-fill order may create three trades AB, AC and AD from filling three partial orders A-l, A-2 and A-3 of the order A that are matched respectively with the orders B, C and D, where the three trades form a trading event ABCD. For example, the partial orders A-l, A-2 and A-3 may be based on the order A to buy a financial instrument and be filled at different prices and quantities, and the orders B, C and D may be orders to sell the financial instrument that are matched to portions of the order A corresponding to partial orders A-l, A-2 and A-3, respectively, that are filled to create trades AB, AC and AD which form the trading event ABCD. For the trading event ABCD, the matching engine 16 may generate three trade messages containing different trade data for the orders B, C and D respectively of the customers B, C and D that were matched with the partial orders A-l, A-2 and A-3 of the order A. In addition, the matching engine 16 may generate a trade message for the order A of customer A for the trading event ABCD, which contains trade data that describes the three trades generated from filling the entirety of the order A, by filling the partial orders A-l, A-2 and A-3 which are matched respectively with the orders of B, C and D. The matching engine 16 may transmit trade messages for the customers B, C and D to an order gateway(s) that respectively services the customers B, C and D, and a trade message for the customer A to an order gateway that services the customer A. In the example, the total number of orders filled for the trading event is four, namely, the orders B, C and D and the order A, and partial orders of the order A of customer A are not counted in the total number of orders filled for the trading event. In the example of the trading event ABCD, each trade message for the trading event ABCD may indicate an identifier of thetrading event, an identifier of a customer involved in the trading event, only trade data specific to an order of the customer and the value 4 as the total number of orders filled for the trading event.
[0082] In one embodiment, partial orders of a single order that are filled to completely fill the single order may be counted in determining a total number of orders filled for a trading event. Referring to the above example of the trading event ABCD, the matching engine 16 may generate six trade messages for the trading event, and the total number of orders filled for the trading event is equal to six. The trade messages for the customer A include three trade messages A-l, A-2 and A-3 containing different trade data respectively for the partial orders A-l, A-2 and A-3 of the customer A. In addition, three trade messages respectively for the customers B, C and D are generated and include the trade data for the filled orders B, C and D that are matched respectively with the partial orders A-l, A-2 and A-3.
[0083] The network interface 140 may have network communication capabilities, and be configured to receive trade messages from the matching engine 16. The trade messages received at the network interface 140 may include only those trade messages that include network address information corresponding to the order gateway 120, such that the order gateway 120 receives only a trade message containing trade data of a customer serviced by the order gateway 120. In other words, the network interface 140 may receive over the communication network 18 only those trade messages having the network address information of the order gateway 120, such that the trade messages received are only for customers serviced by the order gateway 120, and in particular having respective client devices coupled to the FPGA thereof. In addition, the trade messages for the trading event may be received at the network interface 140 in a sequence that corresponds to a sequence that the trade messages for the trading event are serially transmitted from the matching engine 16.
[0084] The network interface 140 may be configured to extract data from a trade message for a trading event. The extracted data may include trade data specific to an order of a customer involved in the trading event indicated in the trade message, identifiers of the trading event and the customer, an event time of the trading event and a total number of orders filled for the trading event. The network interface 140 may store in memory, such as the memory 136, a total number of filled orders for a trading event with an identifier of the trading event, as indicated in a trade message. In addition, the network interface 140 may store in memory, such as the memory 136,an event time of a trading event with an identifier of the trading event, and trading event reporting data indicating the trading event is a trading event for reporting.
[0085] In addition, for each trade message for a trading event received, the network interface 140 may be configured to route, over the data path 142 to the trade data processing circuit 150, trade data specific to an order of a customer involved in the trading event as indicated in the trade message, and other trade data indicated in the trade message, such as identifiers of the customer and trading event.
[0086] The trade data processing circuit 150 may be configured to receive, for each trade message for a trading event received at the network interface 140, trade data from the trade message routed from the network interface 140 over the data path 142. The trade data processing circuit 150 may, from trade data corresponding to each trade message for a trading event received at the network interface 140, generate a trade notification message indicating trade data specific to an order of a customer involved in the trading event indicated in the trade message. Each trade notification message may indicate an identifier of a customer and an identifier of a trading event indicated in trade data of the trade notification message.
[0087] In one embodiment, the trade data processing circuit 150 may generate, for each trade notification message, based on the configuration information, distribution information indicating a client device 180 of a customer indicated in the trade notification message and to which the order gateway 120 is coupled.
[0088] Based on trade data from respective trade messages for a trading event routed from the network interface 140, the trade data processing circuit 150 may generate trade notification messages for the trading event respectively for client devices of customers involved in the trading event.
[0089] In addition, the trade data processing circuit 150 may generate a feed of trade notification messages for respective trading events for a specific customer, according to the configuration information. Each feed may be for routing trade notification messages that are for transmission only to a specific client device corresponding to a specific customer. The trade notification messages routed in a specific feed may include only trade data for a specific customer serviced by the order gateway 120.
[0090] The trade data processing circuit 150, based on the configuration information and the distribution information, may route feeds of trade notification messages, which are ultimatelyfor respective client devices 180, from feed ports 154 over data paths 152 to the distribution circuit 160.
[0091] The distribution circuit 160 may receive, from the trade data processing circuit 150, feeds of trade notification messages routed over data paths 152. In addition, the distribution circuit 160 may, based on trade notification messages in the feeds from data paths 152, route trade notification messages over data paths 162 to message delivery circuits 170, in accordance with the configuration information.
[0092] Referring to FIGs. 1 and 3, in one embodiment, each order gateway may include an FPGA having a predetermined number of message delivery interfaces, such as message delivery circuits 170, from which a trade notification message may be transmitted to a client device of a customer serviced by the order gateway and indicated in the trade notification message.
[0093] A message delivery circuit 170 may include network communication capabilities and be configured to transmit a trade notification message over a communication path 172 to a client device 180. A message delivery circuit 170 may transmit a trade notification message received over a data path 162 only to a client device 180 to which a communication path 172 extends from the message delivery circuit 170, according to the configuration information.
[0094] Referring to FIG. 3, in an example of operation in accordance with the configuration information, the distribution circuit 160 may route a first trade notification message of feed A on the data path 152A over the data path 162A to the message delivery circuit 170A, and the message delivery circuit 170A may transmit the first trade notification message from the feed A over the communication path 172A only to the client device 180A.
[0095] The distribution circuit 160 may control a message delivery circuit 170 to transmit a trade notification message routed thereto over a data path 162, when a distribution time for the trade notification message is satisfied. In one embodiment, distribution times for trade notification messages for a trading event may be determined based on operations that order gateways perform to synchronize initiation of distribution of the trade notification messages therefrom. As discussed in detail below, by synchronizing initiation of distribution for a same trading event, transmission of trade notification messages for the same trading event, from different FPGAs of respective order gateways of the computing system 10, may be controlled to ensure that the trade notification messages for the same trading event are received at client devices respectively of the customers involved in the same trading event and serviced by the order gateways, at the same or substantiallythe same time. A distribution time for a trade notification message for a trading event may be based on the initiation of distribution for the trading event, and a network latency offset corresponding to a client device to which the trade notification message is for transmission.
[0096] In one embodiment, synchronized initiation of distribution of trade notification messages for a trading event may be based on operations performed at multiple order gateways 20 and the broadcast device 22 of the computing system 10 as follows. The distribution circuit 160 of the order gateway 120 is referred to below to exemplify features of synchronizing initiation of distribution, and it is to be understood that distribution circuits respectively of other order gateways 20 of the computing system 10 may perform the same or similar operations as the distribution circuit 160. Referring to FIGs. 1 and 3, the distribution circuit 160 may be configured to generate, and transmit to the broadcast device 22, such as over the broadcast network 24, instructions to cause the broadcast device 22 to generate, and broadcast over the broadcast network 24 to all order gateways of the computing system 10, messages for a specific trading event. Further, the distribution circuit 160 may be configured to receive, from the broadcast device 22 over the broadcast network 24, and process, a message for a specific trading event. The broadcast device 22 may be configured to receive over the broadcast network 24, from the distribution circuit 160, an instruction to generate a message for a specific trading event, and based on the instruction, generate, and broadcast over the network 24 for receipt by all order gateways, a message for the specific trading event.
[0097] In one embodiment, distribution circuits respectively of order gateways of the computing system 10 and the broadcast device 22 may be configured to synchronize initiation of distribution of trade notification messages for a trading event among order gateways as follows. The distribution circuit 160 of the order gateway 120 is referred to below to describe an embodiment of synchronizing initiation of distribution, and it is to be understood that distribution circuits respectively of other order gateways 20 of the computing system 10 may perform the same or similar operations as the distribution circuit 160. The distribution circuit 160 may generate, for each trade notification message for a trading event received by the distribution circuit 160, desirably immediately upon receipt, an instruction to broadcast a ready to send message (“RTS instruction”) that indicates an identifier of the trading event to which the trade notification message corresponds. The distribution circuit 160 may transmit the RTS instruction, desirably immediately upon generation, over the broadcast network 24 for receipt by the broadcast device 22. Thebroadcast device 22 may receive an RTS instruction for a trading event over the broadcast network 24, and based on the RTS instruction, desirably immediately upon receipt thereof, generate, and broadcast over the broadcast network 24 to all order gateways, a ready to send message indicating an identifier of the trading event. The distribution circuit 160 may receive, over the broadcast network 24 from the broadcast device 22, a ready to send message for a trading event. For ease of reference herein, a ready to send message for a trading event may be referred to as an RTS message for a trading event.
[0098] The distribution circuit 160 may be configured to determine receipt, over the broadcast network 24, of a RTS message for a trading event, and determine whether the RTS message corresponds to a trading event for reporting as indicated in the memory 136. When the RTS message corresponds to a trading event for reporting, the distribution circuit 160 may update a count of a number of RTS messages for the trading event received. In one embodiment, the distribution circuit 160 may be configured to implement a counter for a trading event that tracks a number of RTS messages for the trading event received, and where a value of the counter is incremented or decremented by one each time that a RTS message for the trading event is received. For example, a counter for a trading event may have an initial value of zero and be incremented by one each time that a RTS message for the trading event is received, such that a value of the counter reflects a total number of RTS messages for the trading event received. In another example, a counter for a trading event may be set to the value of the total number of orders filled for the trading event, and be decremented by one each time that an RTS message for the trading event is received.
[0099] The distribution circuit 160 may be configured to continuously determine, based on the value of a counter for a trading event, whether the total number of RTS messages for the trading event received is equal to the total number of orders filled for the trading event, as stored in the memory 136. In one embodiment where the counter for a trading event is set to an initial value of zero and incremented by one each time that a RTS message for the trading event is received, the distribution circuit 160 may determine that the total number of RTS messages for the trading event received is equal to the total number of orders filled for the trading event when the value of the counter is equal to the total number of orders filled for the trading event. In another embodiment where the counter for a trading event is set with an initial value of the total number of orders filled and the counter is decremented by one each time a RTS message for the trading event is received,T1the distribution circuit 160 may determine that the total number of RTS messages for the trading event received is equal to the total number of orders filled for the trading event when the value of the counter is equal to zero.[000100] The distribution circuit 160 may be configured to, when the value of a counter for a trading event indicates the total number of RTS messages for the trading event received is equal to the total number of orders filled for the trading event, generate and, transmit over the broadcast network 24 to the broadcast device 22, a confirmation instruction to broadcast a confirmation message indicating the identifier of the trading event. The broadcast device 22 may, based on receipt of a confirmation instruction, generate, and broadcast over the network 24 to all order gateways of the computing system 10, desirably immediately upon receipt of the confirmation instruction, a confirmation message for the trading event.[000101] The distribution circuit 160 may receive, from the broadcast device 22 over the network 24, a confirmation message for a trading event, and determine a time that the confirmation message is received using a current time of an electronic clock.[000102] In one embodiment, an electronic clock used to determine a time that a confirmation message is received at an order gateway 120 may be a local clock of the order gateway 120. In one embodiment, the server 132 of each order gateway 20 may be configured to include and control an electronic clock as a local clock of the order gateway 20 that electronically times at increments of nanoseconds, and where the time of the local clock is not based on the time of the system clock. [000103] In addition, the distribution circuit 160 may determine whether a confirmation message for a trading event is a first confirmation message for the trading event received, and store in memory, such as the memory 136, a first confirmation time for the trading event that is equal to a time of the local clock when the first confirmation message for the trading event is received. When the distribution circuit 160 determines that a first confirmation message for a trading event is received, the distribution circuit 160 may immediately initiate distribution of trade notification messages for the trading event generated at the order gateway 120, to client devices respectively of customers indicated in the trade notification messages. As the first confirmation message for a trading event may be received at a same real time at all order gateways of the computing system 10 that generate trade notification messages for the trading event, advantageously the distribution of the trade notification messages for the trading event may be initiated at a same or substantiallythe same real time at all order gateways of the computing system that generate trade notification messages for the trading event.[000104] When distribution is initiated for a trading event, the distribution circuit 160 may determine a distribution time for each trade notification message for the trading event received at the distribution circuit 160, based on the first confirmation time for the trading event. At each order gateway that generates a trade notification message for the trading event, the first confirmation time for the trading event corresponds to a same real time. As a result, a distribution time for a trade notification message may be determined relative to a same real time at each order gateway in the computing system 10, regardless of whether the local clocks of respective order gateways are synchronized to each other. The determination of the distribution times relative to a same real time at each of the order gateways advantageously may provide that each trade notification message for a same trading event may be transmitted from an FPGA of an order gateway of the computing system 10 to be received at a same or substantially the same time at each client device 180 of a customer involved in the same trading event.[000105] In another embodiment, the computing system 10 may use a time of the system clock to determine a first confirmation time for a trading event at each order gateway. In this embodiment, order gateways may use the same first confirmation time for a trading event to determine distribution times for trade notification messages generated respectively at the order gateways. In this embodiment, the server 132 may store in the memory 136 a first confirmation time for a trading event which corresponds to a time of the system clock when the first confirmation message for the trading event is received at the order gateway 120.[000106] In one embodiment, distribution times for trade notification messages for a same trading event may be determined to equalize differences in network latencies associated with transmission of the trade notification messages for the same trading event from respective message delivery circuits 170, over communication paths 172, to client devices 180. The distribution times of respective trade notification messages may be based on network latency offsets including propagation delay offsets.[000107] In one embodiment, the distribution circuit 160 may be configured to determine a distribution time for a trade notification message for a trading event that is equal to a sum of: a first confirmation time for the trading event determined from a time of a local clock of the order gateway 120 and a network latency offset for the client device corresponding to the tradenotification message. The distribution circuit 160 may, continuously or at a preset time interval, determine a current time of the local clock, and compare a distribution time for a trade notification message with the current time of the local clock. The distribution circuit 160 may determine that a distribution time is satisfied, when the current time of the local clock is the same as or after the distribution time. When the distribution time for a trade notification message is determined to be satisfied, the distribution circuit 160 may cause transmission of the trade notification message from a message delivery circuit 170. As indicated above, first confirmation times for a trading event determined from local clocks of respective order gateways correspond to a same real time at which the first confirmation message for the trade event is received at the order gateways.[000108] In another embodiment, the distribution circuit 160 may be configured to determine a distribution time for a trade notification message for a trading event that is equal to a sum of: a first confirmation time for a trading event that is based on a time of the system clock when the first confirmation message for the trading event is received and a network latency offset for the client device corresponding to the trade notification message. The distribution circuit 160 may, continuously or at a preset time interval, determine a current time of the system clock, and compare a distribution time for a trade notification message with the current time of the system clock. The distribution circuit 160 may determine that a distribution time is satisfied, when the current time of the system clock is the same as or after the distribution time. When the distribution time for a trade notification message is determined to be satisfied, the distribution circuit 160 may cause transmission of the trade notification message from a message delivery circuit 170.[000109] As each distribution circuit of each order gateway of the computing system 10 may receive a first confirmation message for a specific trading event at a same real time, the initiation of distribution of trade notification messages for the specific trading event from multiple FPGAs of respective order gateways to client devices of respective customers serviced by order gateways may be synchronized with a time that the first confirmation message for the specific trading event is received at an order gateway. Thus, trade notification messages which respectively include different trade data specific to orders filled to create respective trades in a specific trading event may be transmitted, accounting for respective network latency offsets, from FPGAs respectively of the order gateways of the computing system 10, to provide that the trade notification messages for the specific trading event are received at a same or substantially same time at client devices of customers indicated in the trade notification messages for the specific trading event.[000110] In another embodiment, the distribution circuit 160 may be configured to determine whether a predetermined time interval elapsed since an event time of a trading event, and determine whether a delay condition exists for the trading event when the predetermined time interval is determined to have elapsed since the event time of the trading event. In addition, the distribution circuit 160 may generate, for a trading event for which a delay condition is determined to exist, an instruction to broadcast a delay condition message (“delay condition instruction”) that indicates an identifier of the trading event. The distribution circuit 160 may transmit the delay condition instruction, desirably immediately upon generation, over the broadcast network 24 for receipt by the broadcast device 22. The broadcast device 22 may receive a delay condition instruction for a trading event over the broadcast network 24, and based on the delay condition instruction, desirably immediately upon receipt thereof, generate, and broadcast over the broadcast network 24 to all order gateways, a delay condition message indicating an identifier of the trading event. The distribution circuit 160 may receive, over the broadcast network 24 from the broadcast device 22, a delay condition message for a trading event, and determine a time that the delay condition message is received using a current time of an electronic clock, such as the local clock of the order gateway 120. In addition, the distribution circuit 160 may determine whether a delay condition message for a trading event is a first delay condition message for the trading event received, and store in memory, such as the memory 136, a first delay condition time for the trading event that is equal to a time of the local clock when the first delay condition message for the trading event is received. When the distribution circuit 160 determines that a first delay condition message for a trading event is received, the distribution circuit 160 may immediately initiate distribution of trade notification messages for the trading event generated at the order gateway 120, to client devices respectively of customers indicated in the trade notification messages. As the first delay condition message for a trading event may be received at a same real time at all order gateways of the computing system 10 that generate trade notification messages for the trading event, advantageously the distribution of the trade notification messages for the trading event may be initiated at a same or substantially the same real time at all order gateways of the computing system that generate trade notification messages for the trading event.[000111] In one embodiment, when initiation of distribution of trade notification messages for a trading event is based on a determination that a first delay condition message for the trading event is received, the distribution circuit 160 may be configured to determine a distribution timefor a trade notification message for the trading event that is equal to a sum of a first delay condition time for the trading event determined from a time of an electronic clock, such as a local clock, at the order gateway 120, and a network latency offset for the client device corresponding to the trade notification message. The distribution circuit 160, similarly as described above, may, when a distribution time for a trade notification message is determined to be satisfied, cause transmission of the trade notification message from a message delivery circuit 170. As indicated above, first delay condition times for a trading event determined from local clocks of respective order gateways correspond to a same real time at which the first delay condition message for the trading event is received at the order gateways.[000112] In one embodiment, the memory 136 may include a lookup table or equivalent that indicates, for each trade notification message to be transmitted to a client device 180, a distribution time, a propagation delay offset, a message delivery circuit 170 for transmission of the trade notification message and a client device 180 to receive the trade notification message. For example, the memory 136 may indicate that a trade notification message for transmission from the message delivery circuit 170A to a client device 180A has a propagation delay offset of 9 ns.[000113] In one embodiment, the distribution circuit 160 may cause simultaneous transmission of trade notification messages for a same trading event, from several message delivery circuits 170 to respective client devices 180. In one embodiment, the message delivery circuits 170 may be caused to transmit trade notification messages for a same trading event over communication paths 172 at different times, in accordance with the distribution times thereof, to provide that respective trade data of the same trading event are received at a same or substantially the same time by respective client devices 180.[000114] In one embodiment, the communication paths 172 may constitute a high-speed signal transmission medium, such as optical fiber, electrical cable or the like. The communication paths 172 may have predetermined network properties, which are based on a type of transmission medium of the communication path, and different communication protocols may be used to transmit signals on respective communication paths. The network properties and length of a predetermined communication path, and a communication protocol used to transmit a data signal, such as a trade notification message, along the communication path, may determine a propagation delay associated with transmitting the trade notification message from a message delivery circuit 170 over a communication path 172 to a respective client device 180. Differences in the networkproperties and lengths of the respective communication paths 172, and communication protocols used to transmit data signals on the respective communication paths 172, may result in different propagation delays for the respective communication paths 172 extending from the message delivery circuits 170 to respective client devices 180.[000115] In one embodiment, the memory 136 may include communication path information indicating characteristics of a predetermined communication path that extends from a specific message delivery circuit over a predetermined communication path 172 to a predetermined client device 180 of a customer. The processor 134 may, based on the communication path information, determine a propagation delay offset associated with transmission of a trade notification message from a specific message delivery circuit 170 to a specific client device 180. A propagation delay offset may be determined as a time difference between a time of transmission of a trade notification message from the computing system, such as from a message delivery circuit 170, over a communication path 172, to a client device 180, and a time the trade notification message is received at the client device 180.[000116] The propagation delay offsets may be utilized to equalize differences in the propagation delays associated with communication paths 172 extending to respective client devices 180, to advantageously provide that different trade data for a same trading event may be received at a same or substantially the same time at respective client devices 180.[000117] In one embodiment, a length of an optical fiber cable extending from a message delivery circuit to a client device may be measured by electronic, optical or manual techniques, for example, by a tape measure, and the propagation delay offset for the client device may be determined based on the measured length of an optical fiber cable extending from the message delivery circuit to the client device.[000118] The processor 134 may store in the memory 136 propagation delay offsets for communication paths 172 associated with respective message delivery circuits 170 and client devices 180.[000119] In one embodiment, a trade notification message may be transmitted using a binary market protocol format, such as Financial Information exchange (FIX®) protocol, or a multicast message format. In one embodiment, a communication path 172 between the message delivery circuit 170 and a computing device 180 may be configured to facilitate communication using a Point to Point FIX protocol, or any other protocol.[000120] In one embodiment, a first trade notification message for a trading event may be transmitted with a message format that is different from a message format of a trade message from which trade data in the first trade notification message is determined, and a second trade notification message for the trading event may be transmitted with a message format that is the same as the message format of the trade message from which trade data in the second trade notification message is determined.[000121] In one embodiment, each trade notification message for a trading event may be transmitted with a message format that is different from a message format of a trade message from which trade data in the trade notification message is determined.[000122] As discussed below in connection with FIGs. 4A and 4B, for a specific instance of a comparison of a current time of an electronic clock, such as a local clock of an order gateway, with distribution times of respective trade notification messages, the distribution times of two or more trade notification messages for a same trading event may be determined to be satisfied. For this comparison instance, when the two or more trade notification messages are for respective different client devices 180, the distribution circuit 160 may cause simultaneous or substantially simultaneous transmission of the trade notification messages from message delivery circuits 170 on to communication paths 172 respectively extending to the different client devices 180. For example, first and second trade notification messages of the two or more trade notification messages for a same trading event may be caused to be simultaneously or substantially simultaneously transmitted from message delivery circuits 170A and 170B respectively for receipt at different client devices 180 A and 180B.[000123] Advantageously in an exemplary operation of the computing system 10, the technical problem of reporting trade data specific to filled orders respectively of customers involved of a trading event including multiple trades for receipt at a same or substantially the same time at client devices of the respective customers, is solved by the technical solution, in accordance with the present disclosure, of synchronizing initiation of distribution of trade notification messages for the trading event by FPGAs of respective order gateways, and determining distribution times for the trade notification messages based on the initiation of distribution for the trading event and propagation delay offsets that equalize differences in network latencies associated with transmission of trade notification messages for the trading event from message delivery circuits over communication paths to the client devices respectively of the customers.[000124] Example Methods[000125] For purposes of illustrating the features of the present disclosure, a high level block diagram of an exemplary process 300, as shown in FIGs. 4A and 4B, is described below in connection with operations performed by components of the computing system 10. The process 300 may report trade data of a trading event to client devices respectively of customers involved in the trading event, where FPGAs of order gateways of the computing system 10 respectively servicing the customers coordinate with each other to cause transmission of trade notification messages indicating trade data specific to orders of the customers to the client devices respectively of the customers, with equalization of differences in network latencies associated with transmission of the trade notification messages over communication paths respectively to the client devices, such that different trade data respectively of the customers involved in the trading event are received at a same or substantially the same time at the client devices respectively of the customers.[000126] In an exemplary embodiment implemented at the computing system 10, the process 300 may control: receiving, from a matching engine at an order gateway, trade messages for a trading event including trades created from filling orders of customers of the computing system 10 serviced by the order gateway; determining, at an order gateway, for each trade message for the trading event received at the order gateway, trade data specific to a filled order of a customer indicated in the trade message; generating, at an order gateway, from each trade message for a trading event received at the order gateway, a trade notification message for an order of a customer indicated in trade data of the trade message; at an order gateway, coordinating with order gateways and a broadcast device to cause broadcast by the broadcast device of a ready to send message for the trading event indicating a trade notification message for the trading event has been generated and a confirmation message indicating that trade notification messages respectively for all orders filled for the trading event have been generated by the computing system 10; initiating, at an order gateway, distribution of trade notification messages for a trading event generated at the order gateway, when a first confirmation message for the trading event is received from the broadcast device; and transmitting, by an order gateway, trade notification messages for a trading event generated at the order gateway at distribution times that are based on a first confirmation time of a first confirmation message for the trading event and equalize any differences in network latencies associated with transmission to client devices respectively of customers involved in the tradingevent. As discussed in detail below, a distribution time for each trade notification message for a trading event may be determined based on a time of initiation of distribution for the trading event that corresponds to a first confirmation time for the trading event and a network latency offset corresponding to a client device of a customer indicated in the trade notification message, to advantageously ensure that different trade data respectively of customers involved in the trading event may be received from the computing system 10 at a same or substantially the same time at client devices respectively of the customers.[000127] For purposes of highlighting features of the process 300, operations performed by components of the order gateway 120, as shown in FIG. 3 and described above, and by components of the computing system 10, as shown in FIG. 1 and described above, are referred to below. It is to be understood that operations of the order gateway 120, as one of the order gateways 20 of the computing system 10, are exemplary of operations that may be performed at each order gateway 20 of the computing system 10, in accordance with the present disclosure, to implement the process 300.[000128] Referring to FIGs. 1, 3, 4A and 4B, in block 302, the matching engine 16 may create a plurality of trades from filling orders of customers, where the trades collectively form a trading event. For example, the trading event may include trades based on a single order as a sweep-to- fill order and second orders matched with respective portions of the single order. After the trading event is generated, the matching engine 16 may generate trade messages indicating details of the orders of customers respectively from which the trades are created to generate the trading event. Each trade message may indicate trade data specific to an order of a customer filled to create a trade in the trading event. A trade message may indicate, for example, price, quantity and orientation (buy or sell) of an asset in the trade; an identifier of the asset, such as an equity, U.S. treasury bond, or intangible asset, such as cryptocurrency; an identifier of a customer whose order was filled to form the trade; and an identifier of the matching engine at which the trading event is generated. In addition, the trade message may indicate an identifier of the trading event indicated in the trade message, an event time of the trading event and a total number of orders filled for the trading event. The event time may be based on a time of a local clock of the matching engine 16 when the trading event is generated at the matching engine 16. The time of the local clock of the matching engine may be based on, and desirably synchronized with, a time of the system clock of the computing system 10.[000129] The matching engine 16 may generate trade messages for a trading event over a predetermined time interval. In one embodiment, one or more trade messages indicating trade data specific to orders respectively of customers involved in the trading event may be generated at different times or at a same time during the predetermined time interval.[000130] In block 302 the matching engine 16 may, following generation of a trade message for a trading event, automatically transmit, without delay, the trade message over the communication network 18. A trade message may be transmitted over the communication network 18 including network information indicating an order gateway 20 that services a customer indicated in the trade message, such that the trade message is received only at an order gateway 20 that services the customer indicated in the trade message. The matching engine 16 may serially transmit trade messages for a trading event, as the trade messages are generated, to selected order gateways 20 of the computing system 10, based on customers respectively indicated in the trade messages.[000131] Further in block 302, the network interface 140 may receive, over the communication network 18 from the matching engine 16, trade messages for a trading event which are for those customers serviced by the order gateway 120. It is to be understood that trade messages for respective customers involved in a trading event may be received only at order gateways that service the respective customers. Based on the serial transmission of trade messages for a specific trading event from the matching engine 16, respective order gateways may receive trade messages for the specific trading event at different times after an event time of the specific trading event.[000132] In block 303, the network interface 140 may determine, from trade messages received from the matching engine 16, each trading event for which a trade message is received at the order gateway 120. In addition, the network interface 140 may determine, for each trading event indicated in the trade messages received, an event time of the trading event and the total number of orders filled for the trading event.[000133] The network interface 140 may store in memory, such as the memory 136, for each trading event based on information in a trade message, an event time of the trading event and the total number of orders filled for the trading event. In addition, the network interface 140 may, for each trading event for which a trade message is received, store in memory 136 trading event reporting data indicating the trading event is a trading event for reporting.[000134] In one embodiment, the network interface 140 may communicate to the server 132 an event time, the total number of orders filled and trading event reporting data for a trading event. The server 132 may store in the memory 136 the event time, the total number of orders filled and the trading event reporting data for the trading event.[000135] In block 304, the network interface 140 may determine, from each trade message received, trade data specific to an order of a customer indicated in the trade message, an identifier of a trading event indicated in the trade message and an identifier of the customer indicated in the trade message.[000136] In one embodiment, the network interface 140 may, for a specific trading event and based on the trade messages received for the specific trading event, communicate with the server 132 to cause the server 132 store in memory, such as the memory 136, trade data of orders respectively of customers involved in the specific trading event.[000137] In addition, in block 304, the network interface 140 may route, over the data path 142 to the trade data processing circuit 150, for each trade message, trade data specific to an order of a customer filled to create a trade of a trading event indicated in the trade message, an identifier of the trading event and an identifier of the customer.[000138] For example, a trade message A for a trade AB created by matching an order A of a customer A with an order B of a customer B, where the trade AB is of a trading event 1, may indicate: trade data specific to the order A of the customer A without any data of the order B or identifying the customer B; an identifier of the customer A; an identifier of the trading event 1; an event time of the trading event 1 ; and the total number of orders filled for the trading event 1. The network interface 140, based on receipt of the trade message A, may route to the trade data processing circuit 150 trade data specific to the order A with the identifiers of the customer A and the trading event 1. In addition, based on receipt of another trade message B for the trade AB indicating trade data specific to the order B, the network interface 140 may route to the trade data processing circuit 150 the trade data specific to the order B with the identifiers of the customer B and the trading event 1.[000139] In one embodiment, the network interface 140 may route, to the trade data processing circuit 150, trade data specific to orders in a trading event obtained from respective trade messages received at the network interface 140, in a same or different sequence than the sequence that the trade messages are received at the network interface 140. The sequence in whichtrade data from respective trade messages are routed to the trade data processing circuit 150 may depend on processing and memory resources capability or availability in the FPGA for processing received trade messages.[000140] In block 306, for each trade data specific to an order of a customer involved in a trading event received at the trade data processing circuit 150, the trade data processing circuit 150 may generate a trade notification message for the customer indicating the trade data specific to the order of the customer, an identifier of the customer and an identifier of the trading event. The trade data processing circuit 150 may, based on an identifier of a customer indicated in the trade data and the configuration information for the order gateway 120, determine distribution information for the trade notification message, where the distribution information indicates a client device 180 of the customer to which the trade data in the trade notification message corresponds. As discussed above, the configuration information may indicate a correspondence between customers serviced by and the client devices coupled to an order gateway.[000141] Further, in block 306, the trade data processing circuit 150 may generate multiple feeds for routing trade notification messages for a trading event to respective client devices 180. For example, the trade data processing circuit 150 may generate distinct trade notification messages for a trading event for respective customers, where each trade notification message includes trade data of an order of a customer filled to create a trade included in the trading event. Based on the configuration information and client devices indicated in the distribution information as corresponding to the trade notification messages, the trade data processing circuit 150 may route trade notification messages having different trade data for a same trading event and which respectively are for different client devices 180, in individual distinct feeds from feed ports 154 respectively over data paths 152 to the distribution circuit 160.[000142] In block 307, the distribution circuit 160 may receive the feeds including trade notification messages routed over the data paths 152 from the trade data processing circuit 150. In addition, in block 307 the distribution circuit 160 may determine the distinct trading events indicated for each of the trade notification message from the feeds.[000143] Also in block 307, the distribution circuit 160 may route the trade notification messages for each trading event, over data paths 162 to respective message delivery circuits 170, according to the configuration information.[000144] For example, based on receipt at the distribution circuit 160 of a trade notification message A for a customer A involved in a trading event 1 on Feed A on data path 152A, the distribution circuit 160 may route the trade notification message A over the data path 162A to the message delivery circuit 170A. As discussed below, the distribution circuit 160 may cause the message delivery circuit 170A to transmit the trade notification message A over the communication path 172A to a client device 180A which corresponds to the customer A.[000145] In one embodiment, the distribution circuit 160 may coordinate with distribution circuits respectively of other order gateways, via the broadcast device 22, to determine when to initiate distribution of trade notification messages for a same trading event from order gateways of the computing system 10; and, based on a time at which distribution is initiated, determine a distribution time for a trade notification message generated at the order gateway 120, where the distribution time is used to determine when to cause transmission of the trade notification message from a message delivery circuit 170. In one embodiment, distribution of trade notification messages for a trading event may be initiated as described below with reference to blocks 308, 310, 312, 314 and 316, to provide that, at each of the order gateways of the computing system 10 at which a trade notification message for a trading event is generated, distribution of the trade notification messages for the trading event is initiated at a same or substantially the same time.[000146] In block 308, for each trade notification message generated for a specific trading event at the order gateway 120, the distribution circuit 160 may generate an RTS instruction to broadcast an RTS message for the specific trading event, and transmit the RTS instruction to the broadcast device 22, such as over the broadcast network 24. Also in block 308, the broadcast device 22, upon receipt of an RTS instruction, may generate and, broadcast over the broadcast network 24 to all order gateways of the computing system 10, an RTS message for the specific trading event indicated in the RTS instruction.[000147] In block 310, the distribution circuit 160 may receive, over the broadcast network 24, an RTS message for a trading event from the broadcast device 22. The distribution circuit 160 may determine whether the trading event indicated by the RTS message corresponds to a trading event for reporting, as indicated in the memory 136. For each ready to send message received that the distribution circuit 160 determines is for a trading event for reporting, the distribution circuit 160 may increment by one a value of a counter for the trading event, which is initialized to a valueof zero, to maintain a current count of a number of RTS messages for the trading event received by the order gateway 120.[000148] In block 312, the distribution circuit 160 may retrieve from the memory 136 the total number of orders filled for a trading event, for each trading event indicated in trading notification messages received in the feeds. Also in block 312, the distribution circuit 160 may continuously determine, for a trading event indicated in the feeds, based on a value of a counter for the trading event, whether a number of RTS messages for the trading event received from the broadcast device 22 equals the total number of orders filled for the trading event. When, in block 312, the number of ready to send messages for a trading event received, as indicated by the value of the counter for the trading event, is determined to be equal to the total number of orders filled for the trading event, the distribution circuit 160 may proceed to perform the operations of block 314. When the distribution circuit determines that the number of ready to send messages for a trading event received, as indicated by the value of the counter for the trading event, is less than the total number of orders filled for the trading event, the distribution circuit 160 may continue to perform the operations of block 312.[000149] For example, a counter for a trading event may be initialized with a value of zero, and incremented by one each time that the distribution circuit 160 determines that a RTS message for the trading event is received. When the distribution circuit 160 determines that a value of the counter for the trading event is equal to the total number of the orders filled for the trading event, then the distribution circuit 160 may proceed to perform the operations of block 314. However, when the distribution circuit 160 determines that the value of the counter for the trading event is less than the total number of orders filled for the trading event, the distribution circuit 160 may continue to perform the operations of block 312.[000150] In block 314, the distribution circuit 160 may generate a confirmation instruction to instruct the broadcast device 22 to broadcast a confirmation message for a trading event for which in block 312 there is a determination that a number RTS messages for the trading event received is equal to the total number of orders filled for the trading event. The distribution circuit 160 may transmit the confirmation instruction for the trading event to the broadcast device 22 over the broadcast network 24.[000151] Also in block 314, the broadcast device 22, upon receipt of a confirmation instruction over the broadcast network 24, may generate, and broadcast over the broadcast network24 to all order gateways 20 of the computing system 10, a confirmation message for a trading event indicated in the confirmation instruction.[000152] In block 316, the distribution circuit 160 may receive, over the broadcast network 24 from the broadcast device 22, a confirmation message for a trading event, and determine a time of a local clock of the order gateway 120 when the confirmation message is received. In addition, in block 316, the distribution circuit 160 may determine whether a confirmation message is a first confirmation message for a trading event that the order gateway 120 receives from the broadcast device. When the first confirmation message for a trading event is determined to be received, the distribution circuit 160 may determine a time of the local clock at which the first confirmation message for the trading event is received, and store in memory 136 a first confirmation time for the trading event that is equal to the time of the local clock when the first confirmation message for the trading event is received by the distribution circuit 160.[000153] Further in block 316, when the first confirmation message for a trading event is determined to be received, the distribution circuit 160 may initiate distribution of trade notification messages for the trading event generated at the order gateway 120.[000154] As all order gateways of the computing system 10 may receive the first confirmation message for a trading event at a same real time, each order gateway that generates a trade notification message for the trading event advantageously may initiate distribution of the trade notification message therefrom at a same real time, in other words, at a time synchronized with a same real time at which the first confirmation messages for the trading event are received respectively at the order gateways.[000155] In another embodiment, the system clock may be used to determine a first confirmation time at each of the order gateways. In this embodiment, distribution is initiated at each of the order gateways that generate a trade notification message for the trading event at a same first confirmation time for the trading event, where the first confirmation time corresponds to a time of the system clock when the first confirmation message for the trading event is received at the order gateways. For example, the first confirmation time utilized to initiate distribution for a trading event at respective order gateways may be a same time of the system clock.[000156] In block 318, when distribution is initiated for a trading event at the order gateway 120, the distribution circuit 160 may cause the message delivery circuits 170 to transmit trade notification messages for the trading event routed thereto respectively to client devices 180, whendistribution times of the trade notification messages for the trading event are respectively determined to be satisfied.[000157] In block 318, the distribution circuit 160 may determine a distribution time for each trade notification message for a trading event as equal to a sum of the first confirmation time for the trading event and a network latency offset for a client device to which the trade notification message corresponds. In one embodiment, the network latency offset may include a propagation delay offset corresponding to the client device 180 indicated by the distribution information for the trade notification message for the trading event. The propagation delay offset for a client device 180 indicated for a trade notification message may be retrieved from the memory 136.[000158] In block 318, the distribution circuit 160 may determine whether a distribution time for a trade notification message is satisfied, by comparing a current time of the local clock with the distribution time of the trade notification message. When the current time of the local clock is determined to be the same or after the distribution time, the distribution time for a trade notification message is satisfied. When the distribution time for a trade notification message is determined not to be satisfied, the distribution circuit 160 may continue periodically, at predetermined intervals, such as every 2 nsec, to compare the distribution time with the current time of the local clock, and determine whether the distribution time is satisfied.[000159] In block 318, when a distribution time of a trade notification message is determined to be satisfied, the distribution circuit 160 may cause transmission of the trade notification message from the message delivery circuit 170 to which the trade notification message is routed from the distribution circuit 160, over a communication path 172 to the client device 180 communicatively coupled to the message delivery circuit 170.[000160] For example, a trade notification message, such as routed over feed A, feed B or feed C, respectively over data path 162A, 162B or 162C, may be routed to a message delivery circuit 170, such as message delivery circuit 170A, 170B or 170C. When the distribution time for a trade notification message is determined to be satisfied, the distribution circuit 160 may cause transmission of the trade notification message, which is at a message delivery circuit 170, from the message delivery circuit 170 to a client device.[000161] In block 318, the distribution circuit 160 may continuously determine whether the distribution time of any trade notification message is satisfied, and cause transmission of the tradenotification messages from message delivery circuits 170 respectively when distribution times are determined to be satisfied.[000162] In one embodiment, the distribution circuit 160 may determine whether, for a trading event and a given current time of the local clock or system clock, several distribution times of respective trade notification messages for the trading event are satisfied, and when several distribution times are determined to be satisfied, cause transmission of the trade notification messages simultaneously from respective message delivery circuits of the order gateway 120. The distribution times of several trade notification messages for a trading event may be determined to be satisfied for a same instance of a comparison with a current time of the local clock or system clock in block 318, due to network latency offsets being the same or about the same for respective client devices.[000163] The following is an example of reporting different trade data of a trading event respectively to customers of the computing system 10, by implementing features of the process 300 in the computing system 10, in accordance with the present disclosure. Details of the example are summarized in FIG. 6, for convenient reference. In the example, the computing system 10 includes order gateways 120A and 120B having a same or similar construction and operation as the order gateway 120, as described above. For ease of reference, the numbering of the components of the order gateways 120A and 120B is the same as described above for the order gateway 120, except that reference numbers of the components in the order gateway 120A have a suffix (A), and reference numbers of the components in the order gateway 120B have a suffix (B). [000164] In the example, the matching engine 16 generates a trading event 1 formed from trades resulting from filling orders A, B, C, D and E of customers A, B, C, D and E, respectively. Order A is a sweep-to-fill order for a U.S. Treasury bond, and orders B, C, D and E are for the same U.S. Treasury bond on a contra side of the order A, at different prices and quantities. The matching engine 16 matches the orders B, C, D and E with portions respectively of the order A to create the trades AB, AC, AD and AE, which completely fill the order A, and generates the trading event 1 including the trades AB, AC, AD and AE. After the trading event 1 is generated, the matching engine 16 generates trade messages A, B, C, D and E respectively for customers A, B, C, D and E for the trading event 1. Trade messages A, B, C, D and E indicate trade data specific to the orders A, B, C, D and E, respectively, and other data relating to the trades created therefrom and the trading event 1. The trade message A indicates trade data specific to partial fills of theorder A that are matched respectively with the orders B, C, D and E, to create the trades AB, AC, AD and AE. The trade message B indicates trade data specific to the filled order B of customer B that is matched with a partial order fill of the order A to create the trade AB. The trade data C, D and E respectively indicate trade data specific to the filled orders C, D and E that are matched respectively with partial order fills of the order A, to create the trades AC, AD and AE.[000165] The matching engine 16 generates the trade messages for the trading event 1 in the sequence of trade messages A, D, C, B and E over a time interval. In the example, the customers A, B and C are serviced by the order gateway 120A, and the customers D and E are serviced by the order gateway 120B. The matching engine 16 transmits trade messages as the trade messages are generated, and serially transmits the trade messages A, C and B in this sequence for receipt only at the order gateway 120A, and serially transmits the trade messages D and E in this sequence for receipt only at the order gateway 120B. Each trade message for the trading event 1 indicates an identifier of the trading event 1, an identifier of a customer indicated in the trade message, a value 5 as a total number of orders filled and an event time of 5 microseconds.[000166] The network interface 140(A) receives the trade messages for the trading event 1 in the order trade messages A, C and B. The network interface 140(B) receives the trade messages for the trading event 1 in the order trade messages D and E. The network interface 140(A) determines trade data specific to the orders A, C and B in sequence from the trade messages A, C and B, respectively, as received at the network interface 140(A). The network interface 140(B) determines trade data specific to the orders D and E in sequence from the trade messages D and E, respectively, as received at the network interface 140(B). The network interface 140(A) routes to the trade data processing circuit 150(A) the trade data for the orders A, C and B in the sequence that the trade data for the orders A, C and B respectively are determined. The network interface 140(B) routes to the trade data processing circuit 150(B) the trade data for the orders D and E in the sequence that the trade data for the orders D and E respectively are determined.[000167] The trade data processing circuits 150(A) and 150(B) generate trade notification messages in the sequence that trade data for the trading event 1 are received from the network interfaces 140(A) and 140 (B), respectively. The trade data processing circuit 150(A) in sequence: generates a trade notification message A for the customer A indicating trade data A for trading event 1, and distribution information indicating trade notification message A is for client device 180A(A); generates a trade notification message B for the customer B indicating trade data B fortrading event 1 , and distribution information indicating trade notification message B is for client device 180B(A); and a trade notification message C for the customer C indicating trade data C for trading event 1, and distribution information indicating trade notification message C is for client device 180C(A). In addition, the trade data processing circuit 150(B) in sequence: generates a trade notification message D for the customer D indicating trade data D for trading event 1, and distribution information indicating trade notification message D is for client device 180A(B); and generates a trade notification message E for the customer E indicating trade data E for trading event 1, and distribution information indicating trade notification message E is for client device 180B(B).[000168] The trade data processing circuit 150(A) routes the trade notification messages A, B, and C from feed ports 154A(A), 154B(A) and 154C(A) in feeds A(A), B(A) and C(A) over data paths 152A(A), 152B(A) and 152C(A), respectively, to the distribution circuit 160(A). The trade data processing circuit 150(B) routes the trade notification messages D and E from feed ports 154A(B) and 154B(B) in feeds A(B) and B(B) over data paths 152A(B) and 152B(B), respectively, to the distribution circuit 160(B). In the order gateway 120A, the trade notification messages for trading event 1 are routed to the distribution circuit 160(A) in the sequence trade notification messages A, C and B, which sequence is identical to the sequence the trade messages A, C and B are received at the network circuit 140(A). In the order gateway 120B, the trade notification messages for trading event 1 are routed to the distribution circuit 160(B) in the sequence trade notification messages D and E, which sequence is identical to the sequence the trade messages D and E are received at the network circuit 140(B).[000169] The distribution circuit 160(A) routes the trade notification messages A, B and C over data paths 162A(A), 162B(A) and 162C(A) to message delivery circuits 170A(A), 170B(A) and 170C(A). The distribution circuit 160(A) routes the trade notification messages A, B and C to the message delivery circuits, immediately upon receipt, in the sequence that the trade notification messages A, B and C are received by the distribution circuit 160(A). The distribution circuit 160(B) routes the trade notification messages D and E over data paths 162A(B) and 162B(B) to message delivery circuits 170A(B) and 170B(B), respectively. The distribution circuit 160(B) routes the trade notification messages D and E to the message delivery circuits, immediately upon receipt, in the sequence that the trade notification messages D and E are received by the distribution circuit 160(B).[000170] In the example, assume propagation delay offsets for client devices 180A(A), 180B(A), 180C(A), 180A(B) and 180B(B) arc 10 nsec, 15 nsec, 5 nsec, 20 nscc and 15 nsec, respectively. In addition, assume a first confirmation time for the trading event 1 is 10 microseconds at the order gateway 120A, where the first confirmation time is based on a time of the local clock at the order gateway 120A; and a second confirmation time for the trading event 1 is 9 microseconds at the order gateway 120B, where the second confirmation time is based on a time of the local clock at the order gateway 120B. The first and second confirmation times respectively for the order gateways 120A and 120B, although having different values, correspond to a same real time, as the first confirmation message for the trading event 1 is received at a same or substantially the same time at the order gateways 120A and 120B. The distribution times for the trade notification messages of the trading event 1 are as follows: Distribution Time 1 for trade notification message A is equal to 10 microseconds + 10 nsec, or 10.010 microseconds; Distribution Time 2 for trade notification message B is equal to 10 microseconds + 15 nsec, or 10.015 microseconds; Distribution Time 3 for trade notification message C is equal to 10 microseconds + 5 nsec, or 10.005 microseconds; Distribution Time 4 for trade notification message D is equal to 9 microseconds + 20 nsec, or 9.020 microseconds; and Distribution Time 5 for trade notification message E is equal to 9 microseconds + 15 nsec, or 9.015 microseconds.[000171] Based on the distribution times, the distribution circuits 160(A) and 160(B) respectively cause transmission of the trade notifications messages C, A and B from the message delivery circuits 170C(A), 170A(A) and 170B(A) to the client devices 180C(A), 180A(A) and 180B(A), respectively, in the sequence trade notifications messages C, A and B; and transmission of the trade notifications messages E and D from the message delivery circuits 170B(B) and 170A(B) to the client devices 180B(B) and 180A(B), respectively, in the sequence trade notifications messages E and D. Referring to FIG. 6, the sequence of transmission of trade notification messages for the trading event 1 is trade notification message C, trade notification message A, trade notification messages B and E simultaneously, and trade notification message D, whereas the trade messages including the trade data from which the trade notification messages C, A, B, E and D are generated are received at the computing system in the sequence trade messages A, D, C, B and E. The transmission of the trade notification messages for the trading event 1 from the order gateways 120A and 120B, which is based on synchronized initiation of distribution for the trading event 1 at the order gateways 120A and 120 B and accounts for networklatencies corresponding to the client devices 180A(B), 180B(A), 180B(B), 180A(A) and 180C(A), advantageously provides that the client devices 180A(B), 180B(A), 180B(B), 180A(A) and 180C(A) may receive the trade notification messages for the trading event 1 including trade data of orders C, A, B, E and D respectively of the customers C, A, B, E and D at a same or substantially the same time, independent of: a time that the trade messages indicating trade data for the customers involved in the trading event are received at an order gateway servicing the customers; a duration for processing a trade message or trade data at an individual component of an order gateway, such as, for example, a processing time to generate a trade notification message indicating trade data specific to an order of the customer; a duration of routing a trade notification message within the FPGA to a message delivery circuit; a time of a local clock of an order gateway used to determine a first confirmation time for the trading event, from which a distribution time is determined for a trade notification message for the trading event to be transmitted from the order gateway; and a network latency associated with transmission of a trade notification message to a client device of a customer of the computing system 10.[000172] In another embodiment, for the above example of the trading event 1 generated based on filling orders A, B, C, D and E, the partially filled orders of order A are indicated in respective trade messages, such that eight trade messages are generated, the total number of orders filled is equal to eight and eight trade notification messages are generated for the trading event and caused to be transmitted at respective distribution times.[000173] In another embodiment, for the above example of the trading event 1 generated based on filling orders A, B, C, D and E, a first confirmation time for the trading event is based on a time of a system clock and, thus, the same first confirmation time is used at the order gateways 120A and 120B to determine a distribution time for a trade notification message generated at the respective order gateway.[000174] Advantageously, the technical problem of reporting different trade data of a same trading event to customers respectively serviced by FPGAs of order gateways of a computing platform, to provide that trade notification messages including the different trade data of customers involved in the same trading event are received at a same or substantially the same time at client devices respectively of the customers, is solved by the technical solution of the present disclosure that synchronizes initiation of distribution of the trade notification messages respectively from the order gateways by coordination among the order gateways and equalizes differences in networklatencies associated with transmission of the trade notification messages to the client devices of the customers respectively serviced by the order gateways.[000175] In another aspect of the present disclosure, the computing system 10 may be configured to operate in an event time mode. In the event time mode, an order gateway of the computing system 10 may cause transmission of trade notification messages for a trading event generated at the order gateway to client devices of respective customers indicated in the trade notification messages, accounting for network latencies corresponding to the client devices, when the order gateway determines a delay condition exists after a predetermined time interval has elapsed since an event time of the trading event. A delay condition may be a total number of ready to send messages for a trading event received at an order gateway is less than a total number of orders filled for the trading event, or a first confirmation message for the trading event has not been received at the order gateway.[000176] In one embodiment, an order gateway of the computing system 10 may be configured to operate in an event time mode by performing a process 400, as illustrated in FIG. 5, at a same time as performing the process 300. For purposes of highlighting features of the process 400, operations performed by components of the order gateway 120, as shown in FIG. 3 and described above, are referred to below. It is to be understood that operations of the order gateway 120, as one of the order gateways 20 of the computing system 10, to implement the process 400 are exemplary of operations that each order gateway 20 of the computing system 10 may desirably perform, in accordance with the present disclosure, to implement the process 400. It is to be understood that each order gateway of the computing system 10 may perform the process 400.[000177] In one embodiment, an order gateway may initiate performing the process 400 when, for a specific trading event, a first trade message for the specific trading event is received at the order gateway, such as at block 302 of the process 300. In other words, the process 400 may be initiated for a specific trading event at an order gateway when, for a first time, the specific trading event is indicated in a trade message received at the order gateway.[000178] Referring to FIG. 5, in block 402, the distribution circuit 160 may determine a difference between a current time of the system clock and an event time for a trading event, and furthermore determine whether the difference is equal to or greater than a predetermined time interval. When the difference is determined to be equal to or greater than a predetermined timeinterval, the predetermined time interval has elapsed since the event time of the trading event and the distribution circuit 160 proceeds to perform the operations of block 404.[000179] In one embodiment, in block 402, the distribution circuit 160 may continuously and automatically determine, at predetermined time increments, for example, every 10 nanoseconds, a current time of the system clock, and compare the current time of the system clock with a sum of an event time for a trading event and a predetermined time interval. When the current time of the system clock is determined to be equal to or after the sum, a predetermined time interval has elapsed since the event time of a trading event, and the distribution circuit 160 proceeds to perform the operations of block 404.[000180] In block 404 the distribution circuit 160 may determine whether a delay condition exists for a trading event for which a predetermined time interval is determined to have elapsed in block 402.[000181] In one embodiment of block 404, a delay condition for a trading event may result when an order gateway of the computing system 10 has not received trade messages for all orders respectively of customers involved in the trading event and serviced by the order gateway. For example, the matching engine may transmit all trade messages for reporting all orders of a trading event respectively to involved customers serviced by order gateways, but one order gateway does not receive all of the trade messages for the trading event for customers involved in the trading event and serviced by the one order gateway. In another example, a delay condition for a trading event may result when an order gateway receives trade messages for reporting all orders of the trading event of respective customers serviced by the order gateway but, due to processing delays at the order gateway, trade notification messages are not timely generated for each of the trade messages received at the order gateway.[000182] In one embodiment of block 404, the distribution circuit 160 may determine, from a counter for a trading event whose value is incremented by one each time an RTS message for the trading event is received, the total number of RTS messages for the trading event received, and compare the total of total number of RTS messages for the trading event received with the total number of orders filled for the trading event. When the total number of RTS messages for the trading event received is less than the total number of orders filled for the trading event, the delay condition is determined to exist.[000183] In another embodiment of block 404, the distribution circuit 160 may determine that a delay condition for a trading event exists when the distribution circuit 160 determines that a confirmation message has not been received for the trading event.[000184] When the delay condition for a trading event is determined to exist in block 404, the distribution circuit 160 proceeds to perform the processing of block 406.[000185] If the delay condition is determined not to exist for a trading event in block 404, no further processing of the process 400 is performed for the trading event.[000186] In block 406, the distribution circuit 160 may generate a delay condition instruction to instruct the broadcast device 22 to broadcast a delay condition message for a trading event for which in block 404 there is a determination that a delay condition exists. The distribution circuit 160 may transmit the delay condition instruction for the trading event to the broadcast device 22 over the broadcast network 24.[000187] Also in block 406, the broadcast device 22, upon receipt of a delay condition instruction over the network 24, may generate, and broadcast over the network 24 to all order gateways 20 of the computing system 10, a delay condition message for a trading event indicated in the delay condition instruction.[000188] In block 408, the distribution circuit 160 may receive, over the broadcast network 24 from the broadcast device 22, a delay condition message for a trading event, and determine a time of a local clock of the order gateway 120 when the delay condition message is received. In addition, in block 408, the distribution circuit 160 may determine whether a delay condition message is a first delay condition message for a trading event that the order gateway 120 receives from the broadcast device. When the first delay condition message for a trading event is determined to be received, the distribution circuit 160 may determine a time of the local clock at which the first delay condition message for the trading event is received, and store in memory 136 a first delay condition time for the trading event that is equal to the time of the local clock when the first delay condition message for the trading event is received by the distribution circuit 160.[000189] When the first delay condition message for a trading event is determined to be received, the distribution circuit 160 may initiate distribution of trade notification messages for the trading event generated at the order gateway 120, and proceed to perform the operations of block 410. In the circumstance that the distribution circuit 160 proceeds to perform the operations ofblock 410, the distribution circuit 160 may cease to perform the operations of block 316 and does not perform the operations of block 318 of the process 300.[000190] As all order gateways of the computing system 10 may receive the first delay condition message for a trading event at a same real time, each order gateway that generates a trade notification message for the trading event advantageously may initiate distribution of the trade notification message therefrom at a same real time, in other words, at a time synchronized with a same real time at which the first delay condition messages for the trading event are received respectively at the order gateways.[000191] In another embodiment, the system clock may be used to determine a first delay condition time at each of the order gateways. In this embodiment, distribution is initiated at each of the order gateways that generate a trade notification message for the trading event at a same first delay condition time for the trading event, where the first delay condition time corresponds to a time of the system clock when the first delay condition message for the trading event is received at the order gateways. For example, the first delay condition time utilized to initiate distribution for a trading event at respective order gateways may be a same time of the system clock.[000192] In block 10, the distribution circuit 160 may initiate distribution for a trading event having a delay condition determined to exist in block 404 and for which a first delay condition message is determined to be received in block 408. For example, distribution may be initiated for a trading event at an order gateway when, for example, another order gateway generated a number of trade notification messages for the trading event that is less than a number of trade messages for the trading event which are transmitted by the matching engine to the another order gateway and which are for customers involved in the trading event and serviced by the another order gateway.[000193] In block 410, the distribution circuit 160 may determine the distribution time for a trading notification message for a trading event as equal to a sum of the first delay condition time for the trading event, and a network latency offset for the trade notification message. In one embodiment, the network latency offset may include a propagation delay offset corresponding to the client device 180 indicated by distribution information for the trade notification message, as retrieved from the memory 136.[000194] In one embodiment, in block 410, the distribution circuit 160 may continuously, or at predetermined increments of time, determine a current time of the system clock, and comparethe current time of the system clock with distribution times of trade notification messages for a specific trading event, to determine whether a distribution time for any trade notification message for the specific trading event is satisfied. The distribution circuit 160 may determine that a distribution time is satisfied, when the current time of the system clock is the same as or after the distribution time.[000195] In block 410, when the distribution circuit 160 determines a distribution time for a trade notification message is satisfied, the distribution circuit 160 may cause transmission of the trade notification message from a specific message delivery circuit 170 to which the trade notification message is routed from the distribution circuit 160, to the client device 180 communicatively coupled to the specific message delivery circuit 170, similarly as described above.[000196] In another embodiment of operation in an event time mode, the process 400 may not include the operations of the blocks 406 and 408. In this embodiment, in the implementation of the process 400, when the delay condition for a trading event is determined to exist in block 404, the distribution circuit 160 may proceed to perform the operations of block 410 similarly as described above, except that a distribution time for a trading notification message for the trading event may be determined to be equal to a sum of an event time for the trading event, the predetermined time interval of block 402 and a network latency offset for the trade notification message.[000197] In another aspect of the present disclosure, a process 500, as illustrated in FIG. 7, may be implemented by the computing system 10 to report trade data of a trading event including several trades, based on an event time of the trading event. Referring to FIG. 7, the process 500 may include blocks 502, 503, 504, 506 and 507, which implement the same or similar operations as described above for blocks 302, 303, 304, 306 and 307 of the process 300, respectively, to generate, at an order gateway, trade notification messages for a trading event for customers serviced by the order gateway, based on trade messages for the trading event received at the order gateway. In addition, the process 500 may include blocks 510 and 512, which implement the same or similar operations as described above for blocks 402 and 410 of the process 400, respectively, to cause transmission of trade notification messages for the trading event from an order gateway, when distribution times for the trade notification messages are determined to be satisfied. In block 512, the distribution times may be determined based on a sum of an event time of the trading event,a predetermined time interval and respective network latency offsets. In the process 500, the operations of block 510 may be initiated at an order gateway for a trading event, when a trade message for the trading event is received at the order gateway in block 502. When a predetermined time interval has elapsed since an event time of a trading event as determined in block 510, processing for the trading event proceeds in block 512, where the order gateway causes transmission of trade notifications messages generated thereat when respective distribution times of the trade notification messages are determined to be satisfied.[000198] Additionally, the present technology may also be configured as below.[000199] (1) A system including: a plurality of programmable integrated circuits communicatively coupled to each other over a broadcast network, in which each of the programmable integrated circuits includes at least one field programmable gate array (FPGA), in which each of the programmable integrated circuits is configured to: receive, from a matching engine, at least one trade message of a trading event, in which the trading event includes trades created by matching respective pairs of orders for a financial asset, in which each of the at least one trade message indicates an identifier of the trading event, trade data of a given order of a given customer filled to create a given trade of the trading event, a total number of orders filled for the trading event and an identifier of the given customer, and in which the given customer indicated in each of the at least one trade message received at the programmable integrated circuit is serviced by the programmable integrated circuit; for each of the at least one trade message for the trading event received at the programmable integrated circuit, generate a given trade notification message indicating given trade data of the given order of the given customer indicated in the at least one trade message; when the given trade notification message for the trading event is generated, cause broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a ready to send message for the trading event; receive, over the broadcast network, a ready to send message for the trading event; determine whether a number of ready to send messages for the trading event received over the broadcast network equals the total number of orders filled for the trading event;when the number of ready to send messages for the trading event received over the broadcast network is determined to be equal to the total number of orders filled for the trading event, cause broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a confirmation message for the trading event; receive, over the broadcast network, a first confirmation message for the trading event; and when the first confirmation message for the trading event is received, initiate distribution of each given trade notification message for the trading event generated at the programmable integrated circuit, in which the distribution includes transmitting the given trade notification message to a given client device of the given customer indicated in the given trade notification message and coupled to the programmable integrated circuit, accounting for network latency corresponding to transmission to the given client device.[000200] (2) The system according to (1), in which the distribution includes transmitting the given trade notification message to the given client device at a given distribution time based on a given propagation delay offset corresponding to a given communication path extending from the programmable integrated circuit to the given client device, in which each client device coupled to a given programmable integrated circuit of the programmable integrated circuits is of a customer serviced by the given programmable integrated circuit and has a propagation delay offset corresponding to a communication path extending from the given programmable integrated circuit to the client device.[000201] (3) The system according to (1) or (2), in which in which each of the programmable integrated circuits is configured to: determine a first confirmation time as a current time of an electronic clock when the first confirmation message is received at the programmable integrated circuit, for each given trade notification message of the trading event generated at the programmable integrated circuit, determine whether a given distribution time of the given trade notification message is satisfied, by comparing a current time of the electronic clock and a sum of the first confirmation time and a given network latency offset associated with transmission of the given trade notification message to the given client device to which the given trade notification message is indicated for transmission, andwhen the given distribution time of the given trade notification message is determined to be satisfied, cause a given message delivery circuit of message delivery circuits of the programmable integrated circuit to which the given trade notification message is routed to transmit the given trade notification message to the given client device.[000202] (4) The system according to any one of (1) to (3), in which the electronic clock is of the programmable integrated circuit.[000203] (5) The system according to any one of (1) to (4), in which each trade message for the trading event indicates an event time of the trading event, in which the event time is based on a time of a system electronic clock of the system when the trading event is generated at the matching engine, in which each of the programmable integrated circuits is configured to: determine whether a predetermined time interval since the event time has elapsed; determine whether a delay condition exists, after determining that the predetermined time interval has elapsed; and when a delay condition is determined to exist, distribute the given trade notification message for the given client device when a given distribution time is satisfied for the given trade notification message, wherein the given distribution time is satisfied for the given trade notification message when a current time of the system electronic clock is equal to or after a sum of the event time, the predetermined time interval and a given network latency offset associated with transmission of the given trade notification message to the given client device, in which the given network latency offset includes a given propagation delay offset corresponding to a given communication path extending from the programmable integrated circuit to the given client device, in which each client device of a plurality of client devices coupled respectively to the programmable integrated circuit has a propagation delay offset corresponding to a communication path extending from the programmable integrated circuit to the each client device.[000204] (6) The system according to any one of (1) to (5), wherein the delay condition is a number of ready to send messages for the trading event received is less than the total number of orders filled for the trading event.[000205] (7) The system according to any one of (1) to (6), in which each trade message for the trading event indicates an event time of the trading event, in which the event time is based ona time of a system electronic clock of the system when the trading event is generated at the matching engine, in which each of the programmable integrated circuits is configured to: determine whether a predetermined time interval since the event time has elapsed; determine whether a delay condition exists, after determining that the predetermined time interval has elapsed; and when the delay condition is determined to exist, cause broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a delay condition message for the trading event, receive, over the broadcast network, a first delay condition message for the trading event, determine a first delay condition time as a current time of an electronic clock when the first delay condition message is received at the programmable integrated circuit, and when the first delay condition message for the trading event is received, distribute the given trade notification message for the given client device when a given distribution time is satisfied for the given trade notification message, wherein the given distribution time is satisfied for the given trade notification message when a current time of the electronic clock is equal to or after a sum of the first delay condition time and a given network latency offset associated with transmission of the given trade notification message to the given client device, in which the given network latency offset includes a given propagation delay offset corresponding to a given communication path extending from the programmable integrated circuit to the given client device, in which each client device of a plurality of client devices coupled respectively to the programmable integrated circuit has a propagation delay offset corresponding to a communication path extending from the programmable integrated circuit to the each client device.[000206] (8) The system according to any one of (1) to (7), further comprising: the matching engine, in which the matching engine is configured to determine a first event time for a first trading event based on a current time of a system electronic clock of the system; in which the matching engine is configured to transmit first trade messages for the first trading event selectively to given ones of the programmable integrated circuits that service first customers respectively having first orders filled to create first trades included in the first trading event and indicated in the first trade messages.[000207] (9) The system according to any one of (1 ) to (8), further comprising: a broadcast device coupled to the broadcast network, in which the broadcast device is configured to: receive an instruction to broadcast a ready to send message for a first trading event or a confirmation message for the first trading event, and based on the instruction, broadcast a given ready to send message for the first trading event or a given confirmation message for the first trading event to each of the programmable integrated circuits.[000208] (10) The system according to any one of (1) to (9), in which the trades of the trading event are created by matching portions of a first order for a financial asset of a first customer with second orders for the financial asset respectively of second customers.[000209] (11) A method including controlling, by each programmable integrated circuit of a plurality of programmable integrated circuits of a system, in which the plurality of programmable integrated circuits is communicatively coupled to each other over a broadcast network, and in which each of the programmable integrated circuits includes at least one field programmable gate array (FPGA): receiving, from a matching engine, at least one trade message of a trading event, in which the trading event includes trades created by matching respective pairs of orders for a financial asset, in which each of the at least one trade message indicates an identifier of the trading event, trade data of a given order of a given customer filled to create a given trade of the trading event, a total number of orders filled for the trading event and an identifier of the given customer, and in which the given customer indicated in each of the at least one trade message received at the programmable integrated circuit is serviced by the programmable integrated circuit; for each of the at least one trade message for the trading event received at the programmable integrated circuit, generating a given trade notification message indicating given trade data of the given order of the given customer indicated in the at least one trade message; when the given trade notification message for the trading event is generated, causing broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a ready to send message for the trading event; receiving over the broadcast network, a ready to send message for the trading event;determining whether a number of ready to send messages for the trading event received over the broadcast network equals the total number of orders filled for the trading event; when the number of ready to send messages for the trading event received over the broadcast network is determined to be equal to the total number of orders filled for the trading event, causing broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a confirmation message for the trading event; receiving, over the broadcast network, a first confirmation message for the trading event; and when the first confirmation message for the trading event is received, initiating distribution of each given trade notification message for the trading event generated at the programmable integrated circuit, in which the distribution includes transmitting the given trade notification message to a given client device of the given customer indicated in the given trade notification message and coupled to the programmable integrated circuit, accounting for network latency corresponding to transmission to the given client device.[000210] (12) The system according to (11), in which the distribution includes transmitting the given trade notification message to the given client device at a given distribution time based on a given propagation delay offset corresponding to a given communication path extending from the programmable integrated circuit to the given client device, in which each client device coupled to a given programmable integrated circuit of the programmable integrated circuits is of a customer serviced by the given programmable integrated circuit and has a propagation delay offset corresponding to a communication path extending from the given programmable integrated circuit to the client device.[000211] (13) The method according to (11) and (12), further comprising controlling, by each of the programmable integrated circuits: determining a first confirmation time as a current time of an electronic clock when the first confirmation message is received at the programmable integrated circuit, for each given trade notification message of the trading event generated at the programmable integrated circuit, determining whether a given distribution time of the given trade notification message is satisfied, by comparing a current time of the electronic clock and a sum of the first confirmation time and a given network latency offset associated with transmission of the given trade notificationmessage to the given client device to which the given trade notification message is indicated for transmission, and when the given distribution time of the given trade notification message is determined to be satisfied, causing a given message delivery circuit of message delivery circuits of the programmable integrated circuit to which the given trade notification message is routed to transmit the given trade notification message to the given client device.[000212] (14) The method according to any one of (11) to (13), in which the electronic clock is of the programmable integrated circuit.[000213] (15) The method according to any one of (11) to (14), in which each trade message for the trading event indicates an event time of the trading event, in which the event time is based on a time of a system electronic clock of the system when the trading event is generated at the matching engine, and further comprising: controlling, by each of the programmable integrated circuits: determining whether a predetermined time interval since the event time has elapsed; determining whether a delay condition exists, after determining that the predetermined time interval has elapsed; and when a delay condition is determined to exist, distributing the given trade notification message for the given client device when a given distribution time is satisfied for the given trade notification message, wherein the given distribution time is satisfied for the given trade notification message when a current time of the system electronic clock is equal to or after a sum of the event time, the predetermined time interval and a given network latency offset associated with transmission of the given trade notification message to the given client device, in which the given network latency offset includes a given propagation delay offset corresponding to a given communication path extending from the programmable integrated circuit to the given client device, in which each client device of a plurality of client devices coupled respectively to the programmable integrated circuit has a propagation delay offset corresponding to a communication path extending from the programmable integrated circuit to the each client device.[000214] (16) The method according to any one of (11) to (15), wherein the delay condition is a number of ready to send messages for the trading event received is less than the total number of orders filled for the trading event.[000215] (17) The method according to any one of (11 ) to (16), in which each trade message for the trading event indicates an event time of the trading event, in which the event time is based on a time of a system electronic clock of the system when the trading event is generated at the matching engine, and further comprising: controlling, by each of the programmable integrated circuits: determining whether a predetermined time interval since the event time has elapsed; determining whether a delay condition exists, after determining that the predetermined time interval has elapsed; and when the delay condition is determined to exist, causing broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a delay condition message for the trading event, receiving, over the broadcast network, a first delay condition message for the trading event, determining a first delay condition time as a current time of an electronic clock when the first delay condition message is received at the programmable integrated circuit, and when the first delay condition message for the trading event is received, distributing the given trade notification message for the given client device when a given distribution time is satisfied for the given trade notification message, wherein the given distribution time is satisfied for the given trade notification message when a current time of the electronic clock is equal to or after a sum of the first delay condition time and a given network latency offset associated with transmission of the given trade notification message to the given client device, in which the given network latency offset includes a given propagation delay offset corresponding to a given communication path extending from the programmable integrated circuit to the given client device, in which each client device of a plurality of client devices coupled respectively to the programmable integrated circuit has a propagation delay offset corresponding to a communication path extending from the programmable integrated circuit to the each client device.[000216] (18) The method according to any one of (11) to (17), in which the system includes the matching engine, in which the matching engine is configured to determine a first event time for a first trading event based on a current time of a system electronic clock of the system;in which the matching engine is configured to transmit first trade messages for the first trading event selectively to given ones of the programmable integrated circuits that service first customers respectively having first orders filled to create first trades included in the first trading event and indicated in the first trade messages.[000217] (19) The method according to any one of (11) to (18), in which the system includes a broadcast device coupled to the broadcast network, in which the broadcast device is configured to: receive an instruction to broadcast a ready to send message for a first trading event or a confirmation message for the first trading event, and based on the instruction, broadcast a given ready to send message for the first trading event or a given confirmation message for the first trading event to each of the programmable integrated circuits.[000218] (20) The method according to any one of (11) to (19), in which the trades of the trading event are created by matching portions of a first order for a financial asset of a first customer with second orders for the financial asset respectively of second customers.[000219] Although the disclosure herein has been described with reference to particular examples, it is to be understood that these examples are merely illustrative of the principles of the disclosure. It is therefore to be understood that numerous modifications may be made to the examples and that other arrangements may be devised without departing from the spirit and scope of the disclosure as defined by the appended claims. Furthermore, while particular processes are shown in a specific order in the appended drawings, such processes are not limited to any particular order unless such order is expressly set forth herein. Rather, various steps can be handled in a different order or simultaneously, and steps may be omitted or added.
Claims
Claims1. A system comprising: a plurality of programmable integrated circuits communicatively coupled to each other over a broadcast network, in which each of the programmable integrated circuits includes at least one field programmable gate array (FPGA), in which each of the programmable integrated circuits is configured to: receive, from a matching engine, at least one trade message of a trading event, in which the trading event includes trades created by matching respective pairs of orders for a financial asset, in which each of the at least one trade message indicates an identifier of the trading event, trade data of a given order of a given customer filled to create a given trade of the trading event, a total number of orders filled for the trading event and an identifier of the given customer, and in which the given customer indicated in each of the at least one trade message received at the programmable integrated circuit is serviced by the programmable integrated circuit; for each of the at least one trade message for the trading event received at the programmable integrated circuit, generate a given trade notification message indicating given trade data of the given order of the given customer indicated in the at least one trade message; when the given trade notification message for the trading event is generated, cause broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a ready to send message for the trading event; receive, over the broadcast network, a ready to send message for the trading event; determine whether a number of ready to send messages for the trading event received over the broadcast network equals the total number of orders filled for the trading event; when the number of ready to send messages for the trading event received over the broadcast network is determined to be equal to the total number of orders filled for the trading event, cause broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a confirmation message for the trading event; receive, over the broadcast network, a first confirmation message for the trading event; andwhen the first confirmation message for the trading event is received, initiate distribution of each given trade notification message for the trading event generated at the programmable integrated circuit, in which the distribution includes transmitting the given trade notification message to a given client device of the given customer indicated in the given trade notification message and coupled to the programmable integrated circuit, accounting for network latency corresponding to transmission to the given client device.
2. The system of claim 1, in which the distribution includes transmitting the given trade notification message to the given client device at a given distribution time based on a given propagation delay offset corresponding to a given communication path extending from the programmable integrated circuit to the given client device, in which each client device coupled to a given programmable integrated circuit of the programmable integrated circuits is of a customer serviced by the given programmable integrated circuit and has a propagation delay offset corresponding to a communication path extending from the given programmable integrated circuit to the client device.
3. The system of claim 2, in which each of the programmable integrated circuits is configured to: determine a first confirmation time as a current time of an electronic clock when the first confirmation message is received at the programmable integrated circuit, for each given trade notification message of the trading event generated at the programmable integrated circuit, determine whether a given distribution time of the given trade notification message is satisfied, by comparing a current time of the electronic clock and a sum of the first confirmation time and a given network latency offset associated with transmission of the given trade notification message to the given client device to which the given trade notification message is indicated for transmission, and when the given distribution time of the given trade notification message is determined to be satisfied, cause a given message delivery circuit of message delivery circuits of the programmable integrated circuit to which the given trade notification message is routed to transmit the given trade notification message to the given client device.
4. The system of claim 3, in which the electronic clock is of the programmable integrated circuit.
5. The system of claim 1, in which each trade message for the trading event indicates an event time of the trading event, in which the event time is based on a time of a system electronic clock of the system when the trading event is generated at the matching engine, in which each of the programmable integrated circuits is configured to: determine whether a predetermined time interval since the event time has elapsed; determine whether a delay condition exists, after determining that the predetermined time interval has elapsed; and when a delay condition is determined to exist, distribute the given trade notification message for the given client device when a given distribution time is satisfied for the given trade notification message, wherein the given distribution time is satisfied for the given trade notification message when a current time of the system electronic clock is equal to or after a sum of the event time, the predetermined time interval and a given network latency offset associated with transmission of the given trade notification message to the given client device, in which the given network latency offset includes a given propagation delay offset corresponding to a given communication path extending from the programmable integrated circuit to the given client device, in which each client device of a plurality of client devices coupled respectively to the programmable integrated circuit has a propagation delay offset corresponding to a communication path extending from the programmable integrated circuit to the each client device.
6. The system of claim 5, wherein the delay condition is a number of ready to send messages for the trading event received is less than the total number of orders filled for the trading event.
7. The system of claim 1 , in which each trade message for the trading event indicates an event time of the trading event, in which the event time is based on a time of a system electronic clock of the system when the trading event is generated at the matching engine, in which each of the programmable integrated circuits is configured to: determine whether a predetermined time interval since the event time has elapsed;determine whether a delay condition exists, after determining that the predetermined time interval has elapsed; and when the delay condition is determined to exist, cause broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a delay condition message for the trading event, receive, over the broadcast network, a first delay condition message for the trading event, determine a first delay condition time as a current time of an electronic clock when the first delay condition message is received at the programmable integrated circuit, and when the first delay condition message for the trading event is received, distribute the given trade notification message for the given client device when a given distribution time is satisfied for the given trade notification message, wherein the given distribution time is satisfied for the given trade notification message when a current time of the electronic clock is equal to or after a sum of the first delay condition time and a given network latency offset associated with transmission of the given trade notification message to the given client device, in which the given network latency offset includes a given propagation delay offset corresponding to a given communication path extending from the programmable integrated circuit to the given client device, in which each client device of a plurality of client devices coupled respectively to the programmable integrated circuit has a propagation delay offset corresponding to a communication path extending from the programmable integrated circuit to the each client device.
8. The system of claim 1, further comprising: the matching engine, in which the matching engine is configured to determine a first event time for a first trading event based on a current time of a system electronic clock of the system; in which the matching engine is configured to transmit first trade messages for the first trading event selectively to given ones of the programmable integrated circuits that service first customers respectively having first orders filled to create first trades included in the first trading event and indicated in the first trade messages.
9. The system of claim 1, further comprising:a broadcast device coupled to the broadcast network, in which the broadcast device is configured to: receive an instruction to broadcast a ready to send message for a first trading event or a confirmation message for the first trading event, and based on the instruction, broadcast a given ready to send message for the first trading event or a given confirmation message for the first trading event to each of the programmable integrated circuits.
10. The system of claim 1, in which the trades of the trading event are created by matching portions of a first order for a financial asset of a first customer with second orders for the financial asset respectively of second customers.
11. A method comprising: controlling, by each programmable integrated circuit of a plurality of programmable integrated circuits of a system, in which the plurality of programmable integrated circuits is communicatively coupled to each other over a broadcast network, and in which each of the programmable integrated circuits includes at least one field programmable gate array (FPGA): receiving, from a matching engine, at least one trade message of a trading event, in which the trading event includes trades created by matching respective pairs of orders for a financial asset, in which each of the at least one trade message indicates an identifier of the trading event, trade data of a given order of a given customer filled to create a given trade of the trading event, a total number of orders filled for the trading event and an identifier of the given customer, and in which the given customer indicated in each of the at least one trade message received at the programmable integrated circuit is serviced by the programmable integrated circuit; for each of the at least one trade message for the trading event received at the programmable integrated circuit, generating a given trade notification message indicating given trade data of the given order of the given customer indicated in the at least one trade message;when the given trade notification message for the trading event is generated, causing broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a ready to send message for the trading event; receiving over the broadcast network, a ready to send message for the trading event; determining whether a number of ready to send messages for the trading event received over the broadcast network equals the total number of orders filled for the trading event; when the number of ready to send messages for the trading event received over the broadcast network is determined to be equal to the total number of orders filled for the trading event, causing broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a confirmation message for the trading event; receiving, over the broadcast network, a first confirmation message for the trading event; and when the first confirmation message for the trading event is received, initiating distribution of each given trade notification message for the trading event generated at the programmable integrated circuit, in which the distribution includes transmitting the given trade notification message to a given client device of the given customer indicated in the given trade notification message and coupled to the programmable integrated circuit, accounting for network latency corresponding to transmission to the given client device.
12. The method of claim 11, in which the distribution includes transmitting the given trade notification message to the given client device at a given distribution time based on a given propagation delay offset corresponding to a given communication path extending from the programmable integrated circuit to the given client device, in which each client device coupled to a given programmable integrated circuit of the programmable integrated circuits is of a customer serviced by the given programmable integrated circuit and has a propagation delay offset corresponding to a communication path extending from the given programmable integrated circuit to the client device.
13. The method of claim 12, further comprising controlling, by each of the programmable integrated circuits:determining a first confirmation time as a current time of an electronic clock when the first confirmation message is received at the programmable integrated circuit, for each given trade notification message of the trading event generated at the programmable integrated circuit, determining whether a given distribution time of the given trade notification message is satisfied, by comparing a current time of the electronic clock and a sum of the first confirmation time and a given network latency offset associated with transmission of the given trade notification message to the given client device to which the given trade notification message is indicated for transmission, and when the given distribution time of the given trade notification message is determined to be satisfied, causing a given message delivery circuit of message delivery circuits of the programmable integrated circuit to which the given trade notification message is routed to transmit the given trade notification message to the given client device.
14. The method of claim 13, in which the electronic clock is of the programmable integrated circuit.
15. The method of claim 11, in which each trade message for the trading event indicates an event time of the trading event, in which the event time is based on a time of a system electronic clock of the system when the trading event is generated at the matching engine, and further comprising: controlling, by each of the programmable integrated circuits: determining whether a predetermined time interval since the event time has elapsed; determining whether a delay condition exists, after determining that the predetermined time interval has elapsed; and when a delay condition is determined to exist, distributing the given trade notification message for the given client device when a given distribution time is satisfied for the given trade notification message, wherein the given distribution time is satisfied for the given trade notification message when a current time of the system electronic clock is equal to or after a sum of the event time, the predetermined time interval and a given network latency offset associated with transmission of the given trade notificationmessage to the given client device, in which the given network latency offset includes a given propagation delay offset corresponding to a given communication path extending from the programmable integrated circuit to the given client device, in which each client device of a plurality of client devices coupled respectively to the programmable integrated circuit has a propagation delay offset corresponding to a communication path extending from the programmable integrated circuit to the each client device.
16. The method of claim 15, wherein the delay condition is a number of ready to send messages for the trading event received is less than the total number of orders filled for the trading event.
17. The method of claim 11, in which each trade message for the trading event indicates an event time of the trading event, in which the event time is based on a time of a system electronic clock of the system when the trading event is generated at the matching engine, and further comprising: controlling, by each of the programmable integrated circuits: determining whether a predetermined time interval since the event time has elapsed; determining whether a delay condition exists, after determining that the predetermined time interval has elapsed; and when the delay condition is determined to exist, causing broadcast, over the broadcast network, to all the FPGAs respectively of the programmable integrated circuits, of a delay condition message for the trading event, receiving, over the broadcast network, a first delay condition message for the trading event, determining a first delay condition time as a current time of an electronic clock when the first delay condition message is received at the programmable integrated circuit, and when the first delay condition message for the trading event is received, distributing the given trade notification message for the given client device when a given distribution time is satisfied for the given trade notification message, wherein the given distribution time is satisfied for the given trade notification message when a current time of the electronic clock is equal to or after a sum of the first delay condition time and a given network latency offset associated with transmission of the given trade notification message to the given client device, in which the given network latency offset includes a given propagation delay offset corresponding to a given10communication path extending from the programmable integrated circuit to the given client device, in which each client device of a plurality of client devices coupled respectively to the programmable integrated circuit has a propagation delay offset corresponding to a communication path extending from the programmable integrated circuit to the each client device.
18. The method of claim 11, in which the system includes the matching engine, in which the matching engine is configured to determine a first event time for a first trading event based on a current time of a system electronic clock of the system; in which the matching engine is configured to transmit first trade messages for the first trading event selectively to given ones of the programmable integrated circuits that service first customers respectively having first orders filled to create first trades included in the first trading event and indicated in the first trade messages.
19. The method of claim 11, in which the system includes a broadcast device coupled to the broadcast network, in which the broadcast device is configured to: receive an instruction to broadcast a ready to send message for a first trading event or a confirmation message for the first trading event, and based on the instruction, broadcast a given ready to send message for the first trading event or a given confirmation message for the first trading event to each of the programmable integrated circuits.
20. The method of claim 11, in which the trades of the trading event are created by matching portions of a first order for a financial asset of a first customer with second orders for the financial asset respectively of second customers.