Skip to main content

trader_bot/
lib.rs

1//! Trader Bot - A configurable trading bot with multi-strategy support.
2//!
3//! This crate provides a comprehensive trading bot framework with:
4//! - Multi-exchange support through a unified abstraction layer
5//! - Multiple trading strategies (balancing, scalping, holding)
6//! - Recursive strategy composition (balancer can balance between sub-strategies)
7//! - Multi-user, multi-account support
8//! - Market simulator for backtesting and testing
9//!
10//! # Architecture
11//!
12//! The crate follows Clean Architecture principles with clear separation:
13//!
14//! - **domain**: Core business types (Position, Wallet, Order, Money, Trade)
15//! - **exchange**: Exchange API abstraction layer (ExchangeProvider trait)
16//! - **strategy**: Trading strategies (balancing, scalping, holding)
17//! - **adapters**: Exchange-specific implementations (T-Bank, Binance, etc.)
18//! - **simulator**: Market simulation for testing
19//! - **config**: Configuration management for multi-user/multi-account setups
20//!
21//! # Features
22//!
23//! - **Portfolio Balancing**: Rebalance portfolio to target allocations
24//! - **Scalping Strategy**: High-frequency buy-low sell-high trading
25//! - **Holding Strategy**: Configurable asset holding with position limits
26//! - **Strategy Composition**: Balance between multiple sub-strategies
27//! - **Multi-Exchange**: T-Bank, Binance, Interactive Brokers support
28//! - **Multi-Account**: Manage multiple accounts per user
29//! - **Multi-User**: Support multiple users with isolated configurations
30//! - **Market Simulator**: Full-featured simulator for backtesting
31//!
32//! # Example
33//!
34//! ```rust,no_run
35//! use trader_bot::{
36//!     strategy::{BalancerEngine, BalancerConfig},
37//!     domain::DesiredAllocation,
38//!     simulator::SimulatedExchange,
39//! };
40//! use rust_decimal_macros::dec;
41//! use std::sync::Arc;
42//!
43//! #[tokio::main]
44//! async fn main() {
45//!     // Create a simulated exchange
46//!     let exchange = SimulatedExchange::new("USD");
47//!     exchange.add_instrument("AAPL", "Apple Inc.", dec!(150), 1);
48//!     exchange.add_instrument("GOOGL", "Alphabet Inc.", dec!(2800), 1);
49//!     exchange.create_account("my_account", dec!(100000));
50//!
51//!     // Define target allocation
52//!     let mut target = DesiredAllocation::new();
53//!     target.set("AAPL", dec!(50));
54//!     target.set("GOOGL", dec!(50));
55//!
56//!     // Create and run balancer
57//!     let exchange = Arc::new(exchange);
58//!     let config = BalancerConfig::default();
59//!     let mut engine = BalancerEngine::new(exchange, config);
60//!
61//!     let result = engine.rebalance("my_account", &target).await;
62//!     println!("Rebalance result: {:?}", result);
63//! }
64//! ```
65
66#![warn(missing_docs)]
67#![warn(rustdoc::missing_crate_level_docs)]
68
69pub mod adapters;
70pub mod cli;
71pub mod config;
72pub mod domain;
73pub mod exchange;
74pub mod simulator;
75pub mod strategy;
76
77// Include lino_args from lib/rust directory
78#[path = "../lib/rust/lino_args/mod.rs"]
79pub mod lino_args;
80
81// Re-export balancer module at the old path for backwards compatibility
82#[doc(hidden)]
83pub use strategy::balancer;
84
85/// Package version (matches Cargo.toml version).
86pub const VERSION: &str = env!("CARGO_PKG_VERSION");
87
88/// Re-export commonly used types at the crate root.
89pub mod prelude {
90    pub use crate::cli::{Cli, RuntimeConfig};
91    pub use crate::config::{AccountConfig, AppConfig, UserConfig};
92    pub use crate::domain::{
93        DesiredAllocation, Money, Order, OrderDirection, OrderStatus, PlannedOrder, PlannedOrders,
94        Position, Trade, Wallet,
95    };
96    pub use crate::exchange::{ExchangeError, ExchangeProvider, ExchangeResult};
97    pub use crate::lino_args::{getenv, getenv_bool, getenv_decimal, getenv_int, getenv_u64};
98    pub use crate::simulator::SimulatedExchange;
99    pub use crate::strategy::{
100        BalancerConfig, BalancerEngine, HoldingStrategy, RebalanceCalculator, RebalancePlan,
101        ScalpingStrategy, Strategy, StrategyAction, StrategyDecision, TradingSettings,
102    };
103}