| Crates.io | tucano-core |
| lib.rs | tucano-core |
| version | 0.12.2 |
| created_at | 2025-08-14 10:39:04.745024+00 |
| updated_at | 2025-08-14 10:39:04.745024+00 |
| description | Framework for building high-performance live-trading, paper-trading and back-testing systems |
| homepage | |
| repository | https://github.com/brbtavares/tucano |
| max_upload_size | |
| id | 1794725 |
| size | 504,165 |
Esta seção inicial foi adicionada para contextualizar o escopo brasileiro (B3 / ProfitDLL) e o status atual de implementação. O conteúdo original em inglês permanece abaixo como documentação abrangente.
O módulo Core é o "cérebro" da plataforma Tucano. Ele coordena estado, eventos e orquestra a interação entre Estratégia, Risco, Execução, Dados, Métricas e Mercados. É aqui que a negociação algorítmica de ações e derivativos da B3 (stocks, índice, mini‑índice, dólar, mini‑dólar, futuros de bitcoin, ouro etc.) será consolidada de forma unificada.
| Responsabilidade | Descrição |
|---|---|
| Motor de Eventos | Loop que recebe MarketEvents / AccountEvents / Comandos e aplica mutações atômicas de estado |
| Gerenciamento de Estado | Estruturas otimizadas para rastrear posições, ordens, saldos, conectividade e relógios |
| Roteamento de Execução | Usa ExecutionTxMap / MultiExchangeTxMap para endereçar pedidos a cada venue (ex: ProfitDLL → B3) |
| Integração Estratégia | Aplica sinais gerados pelos traits de estratégia (strategy crate) no fluxo de eventos |
| Ganchos de Risco | Invoca validadores definidos na crate risk antes de submeter ordens |
| Auditoria | Emissão de eventos de auditoria (para métricas, replay, compliance) |
| Backtest / Live Abstração | Mesma API para simulação e operação real, alterando somente o relógio e origem de dados |
Engine – Orquestrador central, dirige processamento de eventos.EngineState – Estado canônico (posições, ordens, balances, instrumentos, trading state).ExecutionTxMap / MultiExchangeTxMap – Camada de compatibilidade para chaves (ExchangeId interno vs String externo) e roteamento.AccountEvent / MarketEvent (via crates externas) – Unificam entradas de dados e atualizações de conta.TradingState – Liga/Desliga negociação algorítmica atomicamente.Audit (módulo) – Emissão de eventos estruturados para rastreabilidade.SyncShutdown & mecanismos de encerramento seguro.| Depende de | Motivo |
|---|---|
| markets | Tipos de Exchange/Instrument/Assets (incluindo B3) |
| execution | Canal de requisições de ordens + mock / ProfitDLL abstração indireta |
| data | Market stream events e snapshots |
| strategy | Callbacks / geração de sinais |
| risk | Validações pré‑execução |
| integration | Canais / protocolo de mensagens genéricos |
| analytics | Métricas de performance / agregação de resultados |
ExchangeId (remover camada de compatibilidade temporária) quando estáveis os índices externos.Esta seção resume o estado atual focado no mercado brasileiro. O restante do README (abaixo) mantém descrições detalhadas originais em inglês para referência abrangente.
The Core module is the central orchestration layer of the Tucano algorithmic trading framework. It provides the main trading engine, system coordination, execution management, and foundational components that enable professional-grade live trading, paper trading, and backtesting capabilities.
┌──────────────────────────────────────────────────────────────────┐
│ CORE MODULE │
├─────────────────┬─────────────────┬─────────────────┬────────────┤
│ ENGINE │ SYSTEM │ EXECUTION │ BACKTEST │
│ │ │ │ │
│ • Event Engine │ • Configuration │ • Request Router│ • Market │
│ • State Manager │ • System Builder│ • Account Mgmt │ Replay │
│ • Order Process │ • Multi-Exchange│ • Balance Track │ • Strategy │
│ • Audit Trail │ Coordination │ • Error Handle │ Testing │
│ • Risk Controls │ • Shutdown Mgmt │ • Multi-Exchange│ • Analytics│
└─────────────────┴───────────┬─────┴─────────────────┴────────────┘
│
┌─────────────────────────────┴────────────────────────────────────┐
│ INTEGRATIONS WITH OTHER MODULES │
├──────────────────────────────────────────────────────────────────┤
│ 📊 analytics │ 🔄 execution │ 📈 data │ 🎯 strategy │
│ 🏪 markets │ 🔗 integration │ ⚠️ risk │ 🧩 macros │
└──────────────────────────────────────────────────────────────────┘
src/engine/)The heart of the trading system that processes events and coordinates all trading operations.
mod.rs - Main engine implementation with event processing loopaction/ - Engine actions (order generation, position management, cancellations)audit/ - Audit trail system for tracking all engine operationsclock.rs - Timing interface supporting both real-time and historical clockscommand.rs - Command system for external control (shutdown, position management)execution_tx.rs - Multi-exchange transmission mapping for order routingrun.rs - Engine execution runners for different operational modesstate/ - Complete engine state management (positions, orders, balances)src/system/)High-level system coordination and configuration management.
mod.rs - System orchestration and component coordinationbuilder.rs - Ergonomic system builder with fluent configuration APIconfig.rs - Configuration structures for system setupsrc/execution/)Multi-exchange execution management and order routing.
mod.rs - Execution coordination and account stream managementbuilder.rs - Builder for setting up multi-exchange execution linksmanager.rs - Per-exchange execution managers handling order lifecyclerequest.rs - Execution request types and routing logicerror.rs - Execution-specific error types and handlingsrc/backtest/)Historical simulation and strategy testing framework.
mod.rs - Backtesting coordination and multi-strategy testingmarket_data.rs - Historical market data loading and replaysummary.rs - Backtest result analysis and performance reportingerror.rs - Central error type aggregating all core subsystem errorslogging.rs - Structured logging configuration with audit filteringshutdown.rs - Graceful shutdown traits and coordinationlib.rs - Public API exports and core type definitions// Performance analysis and risk metrics
use analytics::{
summary::TradingSummaryGenerator,
metric::{sharpe::SharpeRatio, drawdown::MaxDrawdown},
};
let summary = TradingSummaryGenerator::init();
let sharpe = summary.calculate_sharpe_ratio();
// Market data processing and event streams
use data::{
event::{MarketEvent, DataKind},
streams::consumer::MarketStreamEvent,
};
// Process market events through the engine
engine.process(MarketEvent::Trade(trade_data)).await?;
// Algorithmic trading strategy implementation
use strategy::{
AlgoStrategy, ClosePositionsStrategy,
OnDisconnectStrategy, OnTradingDisabled,
};
// Register strategy with the engine
let strategy = MyAlgoStrategy::new();
engine.register_strategy(strategy);
// Order execution and account management
use execution::{
order::{OrderRequest, OrderStatus},
balance::Balance,
trade::Trade,
};
// Send order through execution system
let request = OrderRequest::market_buy(symbol, quantity);
execution_manager.send(request).await?;
// Exchange and instrument definitions
use markets::{
exchange::ExchangeId,
instrument::Instrument,
Side, OrderType,
};
// Configure supported exchanges
let binance = ExchangeId::new("binance");
let kraken = ExchangeId::new("kraken");
// Risk management and position sizing
use risk::{
RiskManager, PositionSizer,
check::{MaxPositionSize, MaxDrawdown},
};
// Apply risk checks before order execution
let risk_check = risk_manager.validate_order(&order_request)?;
use core::{
engine::Engine,
system::{SystemBuilder, SystemConfig},
execution::builder::ExecutionBuilder,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Initialize logging
core::logging::init_logging();
// Configure system
let config = SystemConfig::builder()
.add_exchange("binance")
.add_strategy(my_strategy)
.build();
// Build and run system
let system = SystemBuilder::new(config)
.build()
.await?;
system.run().await?;
Ok(())
}
use core::{
backtest::{BacktestMarketData, run_backtest},
system::SystemConfig,
};
use analytics::time::TimeInterval;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Load historical data
let market_data = BacktestMarketData::load_csv("data/BTCUSDT_1h.csv").await?;
// Configure strategy
let config = SystemConfig::builder()
.add_strategy(my_strategy)
.backtest_mode()
.build();
// Run backtest
let results = run_backtest(
config,
market_data,
TimeInterval::days(30),
).await?;
// Analyze results
println!("Sharpe Ratio: {:.2}", results.sharpe_ratio());
println!("Total Return: {:.2}%", results.total_return() * 100.0);
Ok(())
}
use core::{
system::SystemBuilder,
execution::builder::ExecutionBuilder,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Configure multi-exchange execution
let execution = ExecutionBuilder::new()
.add_exchange("binance", binance_config)
.add_exchange("kraken", kraken_config)
.add_exchange("coinbase", coinbase_config)
.build()
.await?;
// Build trading system
let system = SystemBuilder::new()
.with_execution(execution)
.add_strategy(arbitrage_strategy)
.build()
.await?;
// Start trading across all exchanges
system.run().await?;
Ok(())
}
┌─────────────────────────────────────────────────────────────────┐
│ EVENT PROCESSING FLOW │
└─────────────────────────────────────────────────────────────────┘
📈 Market Data Event
│
▼
┌───────────────┐ 🎯 Strategy Analysis ┌─────────────────┐
│ Engine Event │ ────────────────────────► │ Algo Strategy │
│ Processor │ │ Signal Gen │
└───────────────┘ └─────────────────┘
│ │
▼ ▼
┌───────────────┐ ⚠️ Risk Assessment ┌─────────────────┐
│ State Update │ ◄─────────────────────────► │ Risk Manager │
│ (Positions, │ │ Position Check │
│ Balances) │ └─────────────────┘
└───────────────┘ │
│ ▼
▼ ┌─────────────────┐
┌───────────────┐ 🔄 Order Routing │ Execution │
│ Audit Trail │ ◄─────────────────────────► │ Request Router │
│ Logging │ │ (Multi-Exchange)│
└───────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ Exchange APIs │
│ (Binance, │
│ Kraken, etc.) │
└─────────────────┘
The core module includes comprehensive test utilities for unit and integration testing:
use core::test_utils::{
trade, asset_state, time_plus_days,
f64_is_eq,
};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_engine_processes_trade() {
let trade = trade(
Utc::now(),
Side::Buy,
50000.0, // price
1.0, // quantity
10.0, // fees
);
// Test trade processing logic
assert!(f64_is_eq(trade.price.into(), 50000.0, 0.01));
}
}
# Logging configuration
export RUST_LOG=info # Default log level
export RUST_LOG=core=debug,execution=info # Module-specific levels
# System configuration
export TOUCAN_CONFIG_FILE=config.toml # Configuration file path
export TOUCAN_AUDIT_ENABLED=true # Enable audit trail
export TOUCAN_RISK_ENABLED=true # Enable risk management
[system]
name = "my_trading_system"
mode = "live" # "live", "paper", or "backtest"
audit_enabled = true
risk_enabled = true
[execution]
default_timeout = "30s"
retry_attempts = 3
max_concurrent_orders = 100
[exchanges.binance]
api_key = "${BINANCE_API_KEY}"
secret_key = "${BINANCE_SECRET_KEY}"
sandbox = false
[exchanges.kraken]
api_key = "${KRAKEN_API_KEY}"
secret_key = "${KRAKEN_SECRET_KEY}"
sandbox = false
[logging]
level = "info"
format = "json" # "json" or "pretty"
audit_filter = true
The core module provides comprehensive error handling through the TucanoError type:
use core::error::TucanoError;
match trading_result {
Ok(success) => println!("Trade executed: {:?}", success),
Err(TucanoError::MarketData(data_err)) => {
eprintln!("Market data issue: {}", data_err);
// Handle data connectivity issues
},
Err(TucanoError::Execution(exec_err)) => {
eprintln!("Execution failed: {}", exec_err);
// Handle order execution failures
},
Err(TucanoError::IndexError(index_err)) => {
eprintln!("Invalid instrument/exchange: {}", index_err);
// Handle configuration issues
},
Err(err) => eprintln!("System error: {}", err),
}
When contributing to the core module:
This module is part of the Tucano trading framework and follows the same licensing terms.
audit/ - Comprehensive audit trail and state replicationclock.rs - Time management for live trading and backtestingcommand.rs - External command interface (CloseAllPositions, etc.)execution_tx.rs - Execution request transmission coordinationrun.rs - Engine execution loops and lifecycle managementstate/ - Complete trading state management (positions, orders, balances)src/system/)System-wide configuration and multi-exchange setup utilities.
builder.rs - System builder for multi-exchange configurationconfig.rs - Configuration structures and validationmod.rs - System coordination and initializationsrc/execution/)High-level execution request routing and account management.
builder.rs - Execution system builder and configurationmanager.rs - Multi-exchange execution coordinationrequest.rs - Execution request types and routingerror.rs - Execution-specific error handlingsrc/backtest/)Backtesting infrastructure and historical data processing.
market_data.rs - Historical market data managementsummary.rs - Backtest result summarizationmod.rs - Backtesting engine coordinationerror.rs - Centralized error handling across all core systemslogging.rs - Structured logging configuration with audit filteringshutdown.rs - Graceful shutdown coordination for all componentslib.rs - Public API and core type definitionsThe core engine processes events in a structured pipeline:
flowchart TD
A[Market Events] --> E[Engine Event Loop]
B[Account Events] --> E
C[Commands] --> E
D[Trading State Updates] --> E
E --> F{Event Type}
F -->|Market Data| G[Update Market State]
F -->|Account Update| H[Update Balances/Positions]
F -->|Command| I[Execute Action]
F -->|Trading State| J[Update Trading Status]
G --> K[Strategy Processing]
H --> K
I --> L[Risk Assessment]
J --> K
K --> L
L --> M[Generate Orders]
M --> N[Route to Exchange]
N --> O[Audit Trail]
O --> P[State Update]
use core::{
engine::Engine,
system::SystemBuilder,
EngineEvent,
logging::init_logging,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Initialize logging
init_logging();
// Build the trading system
let system = SystemBuilder::new()
.add_exchange(/* exchange config */)
.add_strategy(/* strategy config */)
.build()
.await?;
// Create and run the engine
let mut engine = Engine::new(system);
// Process events
while let Some(event) = event_stream.next().await {
engine.process(event).await?;
}
Ok(())
}
use core::{EngineEvent, engine::command::Command};
// Create various engine events
let market_event = EngineEvent::from(market_data);
let account_event = EngineEvent::from(account_update);
let command_event = EngineEvent::from(Command::CloseAllPositions);
let shutdown_event = EngineEvent::shutdown();
// Process through engine
engine.process(market_event).await?;
use core::system::{SystemBuilder, config::ExchangeConfig};
let system = SystemBuilder::new()
.add_exchange(ExchangeConfig {
name: "binance".to_string(),
// ... other config
})
.add_exchange(ExchangeConfig {
name: "kraken".to_string(),
// ... other config
})
.build()
.await?;
The engine can be configured for different operational modes:
The core module includes extensive test utilities:
Engine<T> - Main trading engineEngineEvent<T> - Universal event typeEngineState - Complete system stateTucanoError - Comprehensive error typeSequence - Event sequence trackingSyncShutdown - Synchronous component shutdownAsyncShutdown - Asynchronous component shutdownEngineClock - Time source abstractionFor detailed API documentation, run:
cargo doc --package core --open
When contributing to the core module:
This module is part of the Tucano trading framework. See the main project license for details.