Built from scratch: native C++ engine, Python execution stack, GPU-assisted research, Docker deployment, and an audited path from research artifacts into live configuration.
Liquid OANDA majors traded by the current live system.
Completed S5 candles in each rolling structural window.
Native C++ source-header files and Python modules in the platform codebase.
Historical peak overlap across the 180 / 90 / 30 / 7 day canonical replays.
The platform trades seven liquid FX majors through OANDA. Every completed 5-second candle can trigger a new structural evaluation. The current method is signal-first mean reversion: the system compresses the latest 64 completed candles into a structural state, derives features, and decides whether a move looks exhausted enough to fade.
There is no machine-learning model required for primary entry admission. The live path is built around deterministic gates, pair-specific thresholds, portfolio controls, and a broker-connected execution stack.
OANDA S5 candles
-> stream_candles.py
-> Valkey runtime state
-> native manifold / regime analysis
-> Python gate loading and validation
-> portfolio sizing and risk controls
-> OANDA order routing
-> live reconciliation and telemetry
Byte-stream manifold logic, structural entropy, OANDA client integration, JSON / gzip handling, and Python bindings live in the native core.
Gate loading, risk sizing, exposure tracking, execution management, session policy, and trade lifecycle orchestration run in Python on top of the native engine.
Canonical parameter sweeps, multi-window replay, and parity checks are used to move from research artifacts into live configuration without manual copy-paste drift.
struct Candle {
uint64_t timestamp;
double open, high, low, close, volume;
nlohmann::json toJson() const;
static Candle fromJson(const nlohmann::json& j);
};
redisContext* connectValkey(const std::string& url);
void storeCandleZSET(redisContext* c, const std::string& key, const Candle& candle);
nlohmann::json buildManifoldFromCandles(
const std::vector<Candle>& candles,
const std::string& instrument
);
Taken from the current native trading-signal header. The C++ side owns candle storage, Valkey access, and manifold construction primitives.
self.gate_loader = GateLoader(self.config.redis_url)
self.exposure_tracker = ExposureTracker(service, self.risk_manager)
self.trade_stack = TradeStackProcessor(
self.strategy,
self.session_policy,
self.risk_manager,
self.trade_state,
self.risk_sizer,
self.execution_engine,
self.config.hold_seconds,
)
The Python side coordinates gate loading, exposure tracking, trade-stack processing, execution, and policy enforcement.
| Window | Trade Count | Positive Pair Sharpe | Median Pair Sharpe | Peak Overlap |
|---|---|---|---|---|
| 180 day | 5,330 | 7 / 7 | 2.27 | 35 |
| 90 day | 3,033 | 7 / 7 | 2.45 | 35 |
| 30 day | 1,218 | 6 / 7 | 3.84 | 35 |
| 7 day | 312 | 5 / 7 | 0.53 | 35 |
| Pair | Trades | Return % | Sharpe | Profit Factor | Max Drawdown |
|---|---|---|---|---|---|
| AUD/USD | 1,292 | 56.13 | 2.19 | 1.34 | 19,527 |
| EUR/USD | 665 | 42.81 | 3.69 | 2.02 | 7,494 |
| GBP/USD | 511 | 19.29 | 3.49 | 1.61 | 4,160 |
| NZD/USD | 1,235 | 47.05 | 2.27 | 1.29 | 17,116 |
| USD/CAD | 293 | 33.22 | 3.29 | 2.44 | 7,837 |
| USD/CHF | 439 | 39.91 | 2.25 | 1.64 | 15,769 |
| USD/JPY | 895 | 44.45 | 2.17 | 1.43 | 20,049 |
S5 candles and a 64-candle structural window.