BetaTrader
A HFT Eco-System
Loading...
Searching...
No Matches
TradingCore.h
Go to the documentation of this file.
1
9#pragma once
15#include "common/Order.h"
17#include "data/DatabaseWorker.h"
19#include "data/AuthRepository.h"
20#include <functional>
21#include <memory>
22#include <optional>
23#include <mutex>
24
25namespace trading_core {
31 public:
32 using ExecutionReportCallback = std::function<void(const fix::ExecutionReport&)>;
33
35
36 explicit TradingCore(data::DatabaseWorker* dbWorker,
37 bool autoInitPartitions = true);
38
39 TradingCore(std::unique_ptr<data::DatabaseWorker> dbWorker,
40 std::unique_ptr<data::AuthRepository> authRepo,
41 std::unique_ptr<data::TradeIDRepository> tradeIDRepo,
42 std::unique_ptr<TradeIDGenerator> tradeIDGen,
43 std::unique_ptr<OrderIDGenerator> orderIDGen,
44 bool autoInitPartitions = true);
45
46 virtual ~TradingCore();
47
48 void start();
49
50 void stop();
51
53
54 void waitAllQueuesIdle() const;
55
56 virtual void submitCommand(std::unique_ptr<Command> command) const;
57
58 Partition* getPartition(common::Instrument instrument) const;
59
61
63
65
67
68 virtual void subscribeToMarketData(common::Symbol symbol, common::SessionID sessionId);
69
70 virtual void unsubscribeFromMarketData(common::Symbol symbol, common::SessionID sessionId);
71
72 virtual void unsubscribeFromMarketData(common::SessionID sessionId);
73
75
77
78 static TradingCore& getInstance();
79
80 std::optional<common::Instrument>
82
83 std::optional<common::Order> getOrder(common::OrderID orderId) const;
84
85 std::optional<common::Order> getOrderByClientOrderId(const std::string& clientOrderId) const;
86
87
88#ifndef NDEBUG
89 void setPartition(common::Instrument instrument,
90 std::unique_ptr<Partition> partition);
91#endif
92
93 private:
94 void initPartitions();
95
96 private:
98 std::unique_ptr<data::DatabaseWorker> mOwnedDatabaseWorker;
99 std::unique_ptr<data::AuthRepository> mAuthRepo;
100 std::unique_ptr<data::TradeIDRepository> mTradeIDRepo;
101 std::unique_ptr<TradeIDGenerator> mTradeIDGenerator;
102 std::unique_ptr<OrderIDGenerator> mOrderIDGenerator;
103 std::unique_ptr<Partition>
106 mutable std::mutex mExecutionCallbackMutex;
108 };
109} // namespace trading_core
Asynchronous database worker abstraction.
Represents a partition (shard) of the trading engine for a single symbol.
Repository to persist and retrieve the current trade ID.
Persists and retrieves FIX Client authentication lists.
Definition AuthRepository.h:12
Executes database tasks asynchronously.
Definition DatabaseWorker.h:22
Represents a FIX Execution Report (35=8) message.
Definition ExecutionReport.h:14
Manages market data subscriptions and broadcasts updates.
Definition MarketDataPublisher.h:20
A thread-safe, database-aware generator for unique order IDs.
Definition OrderIDGenerator.h:15
Encapsulates all components needed to process commands for a symbol.
Definition Partition.h:32
High-level manager for partitions and command dispatch.
Definition TradingCore.h:30
std::unique_ptr< data::AuthRepository > mAuthRepo
Definition TradingCore.h:99
void stopAcceptingCommands()
Definition TradingCore.cpp:117
ExecutionReportCallback mExecutionReportCallback
Definition TradingCore.h:105
std::unique_ptr< OrderIDGenerator > mOrderIDGenerator
Definition TradingCore.h:102
std::unique_ptr< Partition > mPartitions[static_cast< int >(common::Instrument::COUNT)]
Definition TradingCore.h:104
std::function< void(const fix::ExecutionReport &)> ExecutionReportCallback
Definition TradingCore.h:32
std::optional< common::Instrument > findPartitionForOrder(common::OrderID orderId) const
Definition TradingCore.cpp:263
Partition * getPartition(common::Instrument instrument) const
Definition TradingCore.cpp:199
void waitAllQueuesIdle() const
Definition TradingCore.cpp:124
std::optional< common::Order > getOrderByClientOrderId(const std::string &clientOrderId) const
Definition TradingCore.cpp:289
virtual void subscribeToMarketData(common::Symbol symbol, common::SessionID sessionId)
Definition TradingCore.cpp:225
virtual void unsubscribeFromMarketData(common::Symbol symbol, common::SessionID sessionId)
Definition TradingCore.cpp:235
data::AuthRepository * getAuthRepository() const
Definition TradingCore.cpp:209
std::mutex mExecutionCallbackMutex
Definition TradingCore.h:106
std::optional< common::Order > getOrder(common::OrderID orderId) const
Definition TradingCore.cpp:274
TradingCore()
Definition TradingCore.cpp:18
MarketDataPublisher & getMarketDataPublisher()
Definition TradingCore.cpp:252
virtual void subscribeToExecutions(ExecutionReportCallback callback)
Definition TradingCore.cpp:219
virtual void submitCommand(std::unique_ptr< Command > command) const
Definition TradingCore.cpp:140
std::unique_ptr< TradeIDGenerator > mTradeIDGenerator
Definition TradingCore.h:101
void stop()
Definition TradingCore.cpp:110
void start()
Definition TradingCore.cpp:100
void setPartition(common::Instrument instrument, std::unique_ptr< Partition > partition)
Definition TradingCore.cpp:303
std::unique_ptr< data::TradeIDRepository > mTradeIDRepo
Definition TradingCore.h:100
data::DatabaseWorker * mDatabaseWorker
Definition TradingCore.h:97
static TradingCore & getInstance()
Definition TradingCore.cpp:257
const ExecutionReportCallback & getExecutionReportCallback() const
Definition TradingCore.cpp:247
virtual ~TradingCore()
Definition TradingCore.cpp:94
std::unique_ptr< data::DatabaseWorker > mOwnedDatabaseWorker
Definition TradingCore.h:98
OrderIDGenerator * getOrderIDGenerator()
Definition TradingCore.cpp:204
data::DatabaseWorker * getDatabaseWorker() const
Definition TradingCore.cpp:214
void initPartitions()
Definition TradingCore.cpp:189
MarketDataPublisher mMarketDataPublisher
Definition TradingCore.h:107
Instrument
Represents the financial instruments available for trading.
Definition Instrument.h:17
@ COUNT
Helper to get the number of instruments.
uint64_t OrderID
A type alias for unique order identifiers.
Definition Types.h:134
uint64_t SessionID
A type alias for session identifiers.
Definition Types.h:142
Definition CommandType.h:7