File size: 1,874 Bytes
ae5ecc5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #ifndef FAST_ALPHA_ENGINE_HPP
#define FAST_ALPHA_ENGINE_HPP
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <numeric>
namespace quant {
struct MarketTick {
double timestamp;
double bid_price;
double ask_price;
double bid_size;
double ask_size;
double last_price;
double last_volume;
};
struct AlphaSignalPayload {
double micro_price;
double order_book_imbalance;
double vwap;
double rolling_volatility;
double ema_9;
double ema_21;
double signal_score;
};
class FastAlphaEngine {
public:
FastAlphaEngine(int window_size = 20);
// Compute Micro-Price: P_micro = (Ask_Size * Bid_Price + Bid_Size * Ask_Price) / (Bid_Size + Ask_Size)
static double calculate_micro_price(double bid_price, double ask_price, double bid_size, double ask_size);
// Compute Order Book Imbalance (OBI): OBI = (Bid_Size - Ask_Size) / (Bid_Size + Ask_Size)
static double calculate_obi(double bid_size, double ask_size);
// Process a stream of market ticks and compute real-time Alpha Signals
AlphaSignalPayload process_tick(const MarketTick& tick);
// Fast vector calculations for Python Pandas integration
static std::vector<double> fast_ema(const std::vector<double>& prices, int period);
static std::vector<double> fast_vwap(const std::vector<double>& prices, const std::vector<double>& volumes);
static std::vector<double> fast_order_flow_imbalance(
const std::vector<double>& bid_prices,
const std::vector<double>& ask_prices,
const std::vector<double>& bid_sizes,
const std::vector<double>& ask_sizes
);
private:
int window_size_;
std::vector<double> price_history_;
std::vector<double> volume_history_;
double cum_pv_;
double cum_vol_;
};
} // namespace quant
#endif // FAST_ALPHA_ENGINE_HPP
|