Ultra-Fast, Low-Latency, Event-Driven Algorithmic Trading Engine
Farukon is a high-performance, Rust-based algorithmic trading platform designed for ultra-low-latency backtesting, multi-strategy optimization, and real-time execution. Built with zero-copy FlatBuffers, SIMD-accelerated calculations, and a multi-threaded event-driven architecture, Farukon enables researchers and traders to prototype, test, and deploy strategies with minimal overhead.
The platform supports dynamic strategy loading via .dylib/.so libraries, grid search and genetic algorithm optimization, margin-aware position sizing, and real-time performance tracking.
- β Event-Driven Architecture: Decouples data, strategy, portfolio, and execution for maximum modularity and speed.
- β
Zero-Copy Data Access: Uses FlatBuffers +
mmapfor memory-mapped OHLCV data β no copying, no allocations. - β
Structure-of-Arrays (SOA) Format: Data is stored and processed in SOA format (
[open1, open2, ...], [high1, high2, ...]), which is optimized for SIMD operations and cache-friendly access - β
SIMD Optimization: Leverages the
widecrate for vectorized computations on indicators, returns, and drawdowns. - β Multi-Threading: Full parallelization across strategies, data loading, and optimization (up to 128+ threads).
- β
Dynamic Strategy Loading: Compile strategies as shared libraries (
cdylib) and load them at runtime β no recompilation needed. - β Multi-Strategy & Multi-Asset Support: Run independent strategies on different instruments simultaneously.
- β Advanced Optimization: Grid Search and Genetic Algorithm optimizers with composite fitness functions.
- β Margin & Risk Management: Automatic position sizing, margin call detection, and forced liquidation.
- β JSON Configuration: All settings are externally configurable β ideal for automated experimentation.
FarukonAlgoTradingPlatform/
βββ Farukon_2_0/ # Main backtesting executable
β βββ src/
β β βββ main.rs # Entry point
β β βββ cli.rs # CLI parser
β β βββ backtest.rs # Core backtesting loop
β β βββ execution.rs # Simulated execution engine
β β βββ optimizers.rs # Grid Search & Genetic Algorithm
β β βββ portfolio.rs # Portfolio & risk management
β β βββ risks.rs # Margin call logic
β β βββ strategy_loader.rs # Dynamic .dylib loader
β β βββ data_engine/ # Data handling and storage module
β β βββ mod.rs # Module declaration
β β βββ data_handler.rs # Zero-copy SOA data handler (implements DataHandler trait)
β β βββ global_data_storage.rs # Centralized store for pre-resampled SOA data
β β βββ ohlcv_soa_generated.rs # FlatBuffer generated code (SOA format)
β β βββ utils.rs # Helper functions for data loading, resampling, and alignment
β βββ Cargo.toml
βββ farukon_core/ # Shared core library
β βββ src/
β β βββ event.rs # Event system (MARKET, SIGNAL, ORDER, FILL)
β β βββ data_handler.rs # DataHandler trait definition
β β βββ execution.rs # ExecutionHandler trait
β β βββ portfolio.rs # Position, Holding, Equity state
β β βββ performance.rs # SIMD-backed metrics (APR, DD, Recovery)
β β βββ indicators.rs # SMA, etc. (can use SOA data efficiently)
β β βββ instruments_info.rs # Instrument metadata
β β βββ commission_plans.rs # Commission rules
β β βββ settings.rs # Config parsing & validation
β β βββ optimization.rs # Grid + GA logic
β β βββ pos_sizers.rs # MPR, fixed_ratio, etc.
β β βββ utils.rs # Helpers
β β βββ lib.rs # Public API
β βββ Cargo.toml
βββ strategy_lib/ # Example strategy (Moving Average Cross)
β βββ src/
β β βββ lib.rs # Compiled as cdylib β libstrategy_lib.dylib
β βββ Cargo.toml
βββ Tickers/ # Market data directory (FlatBuffers .soa.bin/.idx files)
βββ Portfolios/ # Strategy configuration files (.json)
βββ commission_plans.json # Commission structure per exchange
βββ instruments_info.json # Contract metadata (margin, step, expiration)
βββ LICENSE
βββ USER_MANUAL.md
βββ README.md
π‘ Note: The csv-to-flatbuffer utility (see below) generates
.binand.idxfiles for theTickers/directory.
- Prerequisites: Install Rust 1.78+
- Clone the Repository:
git clone https://github.com/andydardgallard/FarukonAlgoTradingPlatform.git cd FarukonAlgoTradingPlatform - Build the Project:
cargo build --release
- Prepare Market Data
Place your OHLCV data in the
Tickers/directory as FlatBuffersoa.bin+soa.idxfiles. These files store data in the Structure-of-Arrays (SOA) format.
β Generate these files using our companion tool:
π csv-to-flatbuffer
High-performance tool to convert CSV/TXT financial tick/OHLCV data into FlatBuffer SOA binary format for ultra-fast backtesting.
- β Zero-copy reading via mmap
- β Multi-threaded conversion
- β Resampling to 1/2/3/4/5min, 1d
- β Fast random access via .idx index
- β Stores data in SOA format for SIMD optimization
Example:
cargo run --release -- \ -i ./Tickers/FBS/Si \ -o ./Tickers/FBS/Si/Si-12.23.bin \ -t 8 \ -r 4min
- Configure Strategy
Edit
Portfolios/Debug_Portfolio.json(see Configuration section below). - Run the Backtester
cargo run --release -- --config Portfolios/Debug_Portfolio.json
All behavior is controlled via a single JSON config file passed with --config.
Top-Level Object
{
"common": { ... },
"portfolio": { ... }
}common (Object): Global Settings
mode(String): Operational mode. Valid values:"Debug","Optimize","Visual".initial_capital(float): Starting capital for the entire portfolio, in base currency (e.g., USD). No need to sum strategy weights to 1.0 β unused capital remains in cash.portfolio(Object): Strategy Definitions
A map where keys are unique strategy IDs (e.g., "Strategy_1"), and values are strategy configurations.
Strategy Configuration (portfolio.<strategy_id>)
{
"threads": 8,
"strategy_name": "MovingAverageCrossStrategy",
"strategy_path": "target/release/libstrategy_lib.dylib",
"strategy_weight": 1.0,
"slippage": [0.005],
"data": { ... },
"symbol_base_name": "Si",
"symbols": ["Si-12.23", "Si-3.24"],
"strategy_params": { ... },
"pos_sizer_params": { ... },
"margin_params": { ... },
"portfolio_settings_for_strategy": { ... },
"optimizer_type": "Grid_Search"
}threads(int, optional): Number of CPU threads to use for this strategyβs calculations. Defaults tonum_cpus::get(). β Fully multi-threaded: Each strategy runs independently in its own thread pool.strategy_name(string): Name of the strategy class (e.g.,MovingAverageCrossStrategy). Must match the exported symbol in the.dylib.strategy_path(string): Path to the compiled dynamic library (.dylibon macOS/Linux,.dllon Windows).strategy_weight(float): Proportion ofinitial_capitalallocated to this strategy. Unused capital remains in cash β no need to sum to 1.0.slippage(array of float OR range object): Slippage applied to market orders as a percentage of price.- Single value:
[0.005] - Range:
{"start": 0.001, "end": 0.01, "step": 0.001}β generates[0.001, 0.002, ..., 0.01]
- Single value:
data(object): Data source configuration.data_path(string): Path to directory containing.bin/.idxfiles (e.g.,"Tickers/FBS/Si").timeframe(string): Target resampled timeframe. Valid values:"1min","2min","3min","4min","5min","1d".
symbol_base_name(string): Base symbol name (e.g.,"Si") used to look up contract metadata ininstruments_info.json.symbols(array of strings): List of contract symbols to trade (e.g.,["Si-12.23", "Si-3.24"]). Must exist ininstruments_info.json.strategy_params(object): Strategy hyperparameters. Each key is a parameter name; value is an array of discrete values or a range object.- Discrete:
"short_window": [50, 100, 150] - Range:
"long_window": {"start": 500, "end": 1000, "step": 100}βgenerates [500, 600, 700, 800, 900, 1000]
- Discrete:
pos_sizer_params(object): Position sizing configuration.pos_sizer_name(string): Sizing method. Valid:"mpr","poe","fixed_ratio","1".pos_sizer_params(object, optional): Additional parameters (currently unused formpr).pos_sizer_value(array of float OR range object): Value(s) for the position sizer parameter.- Single:
[1.5] - Range:
{"start": 1.0, "end": 3.0, "step": 0.5}β generates[1.0, 1.5, 2.0, 2.5, 3.0]
- Single:
margin_params(object): Risk control.min_margin(float): Minimum margin requirement as fraction of strategy capital (e.g., 0.5 = 50%).margin_call_type(string): Action on margin breach. Currently only"close_deal"supported.
portfolio_settings_for_strategy(object): Performance metrics mode.metrics_calculation_mode(string):"offline": Calculate metrics once at end of backtest (faster)."realtime": Update metrics incrementally during backtest (slower, for visualization).
optimizer_type(string or object): Optimization method."Grid_Search": Exhaustive search over all parameter combinations.{ "Genetic": { "ga_params": { ... } } }: Genetic Algorithm optimizer.ga_params(object):population_size(int): Number of individuals per generation.p_crossover(float): Crossover probability (0.0β1.0).p_mutation(float): Mutation probability (0.0β1.0).max_generations(int): Max generations to run.fitness_params(object):fitness_direction(string):"max"or"min"(optimize for max or min fitness).fitness_value(string or object): Metric(s) to optimize.- Single:
"APR","Total_Return","MaxDD","Recovery_Factor","Deals_Count". - Composite:
{ "Composite": { "metrics": ["APR/DD_factor", "Recovery_Factor", "Deals_Count"] } }
- Single:
Farukon is designed to be AI-native β a platform for automated strategy discovery and hyperparameter optimization.
- Standardized API: The
farukon_core::strategy::Strategytrait defines a clean interface for AI agents to implement trading logic. - Structured Configuration Space: JSON config allows AI to generate, mutate, and evaluate millions of parameter combinations automatically.
- Vectorized Performance Metrics:
PerformanceManageruses SIMD to compute returns, drawdowns, and APR β ideal for gradient-free optimization. - Parallelized Optimization: Grid Search and Genetic Algorithm run across 100s of threads β AI can spawn thousands of parallel evaluations.
- Zero-Copy Data Access: AI models query OHLCV data directly from memory-mapped
.binfiles β no serialization overhead. - Dynamic Strategy Loading: AI can compile and load new strategy libraries on-the-fly without restarting the engine.
- Fitness Evaluation Hook: The
calculate_fitness_scorefunction inoptimizers.rsexposes raw metrics (TotalReturn,APR/DD, etc.) for reinforcement learning or Bayesian optimization pipelines.
Use Farukon as a fitness function evaluator.
An AI agent (e.g., Optuna, BayesianOptimization, or custom RL) generates parameter sets β > Farukon runs backtest β Returns metrics β Agent updates policy β Repeat.
Farukon is engineered for ultra-low-latency:
| Feature | Benefit |
|---|---|
β
FlatBuffers .bin + .idx |
Zero-copy memory mapping; no parsing overhead. Random access to any timestamp via .idx. |
β
mmap |
Load 10GB of OHLCV data in < 0.1s β data stays in OS page cache. |
| β Structure-of-Arrays (SOA) Format | Stores data as separate arrays (e.g., opens, highs). Optimal for SIMD and cache-friendly access |
β
SIMD (wide crate) |
Vectorized SMA, returns, and drawdown calculations β 4xβ8x speedup. |
| β Multi-threaded Data Loader | Each strategy loads its own data in parallel. |
| β Multi-threaded Optimization | Grid search and GA run across all CPU cores β 100k+ combinations in minutes. |
| β Dynamic Libraries | Strategies compiled separately β hot-swappable without recompiling engine. |
Tickers/
Tickers/
βββ FBS/
βββ Si/
βββ Si-12.23.soa.bin β FlatBuffer OHLCV data
βββ Si-12.23.soa.idx β Index: timestamps, daily ranges, resampled bars
βββ Si-3.24.soa.bin
βββ Si-3.24.soa.idx
Portfolios/
Portfolios/
βββ Debug_Portfolio.json β Main config
βββ Optimize_Portfolio.json β For GA optimization
instruments_info.json
Defines contract meta margin, step, expiration, commission type. See provided example in repo.
commission_plans.json
Defines commission rates per exchange and instrument type. See provided example in repo.