# mt5-rs A pure Rust library for MetaTrader 5 IPC communication. No Python dependency. Compatible with Python `MetaTrader5` library API. ## Features - Pure Rust implementation, no Python or C++ dependency - Windows named pipe IPC communication with MT5 terminal - Full compatibility with Python `MetaTrader5` library (30/32 functions) - Support MT5 Build 5836+ ## Quick Start ```rust use mt5_rs::{Mt5Client, discover_mt5_pipe}; fn main() -> Result<(), Box> { // Auto-discover MT5 pipe let pipe_name = discover_mt5_pipe(); // Initialize client let mut client = Mt5Client::new(); client.initialize(Some(&pipe_name))?; // Get account info let account = client.account_info()?; println!("Balance: {}", account.balance); println!("Equity: {}", account.equity); println!("Margin Free: {}", account.margin_free); Ok(()) } ``` ## API Reference ### Initialization | Function | Description | |----------|-------------| | `Mt5Client::new()` | Create a new client | | `initialize(pipe_name)` | Initialize connection to MT5 | | `shutdown()` | Close connection | | `login(login, password, server)` | Login to MT5 account | ### Account & Terminal | Function | Description | |----------|-------------| | `account_info()` | Get account information | | `terminal_info()` | Get terminal information | | `version()` | Get MT5 version | | `last_error()` | Get last error code and message | ### Symbols | Function | Description | |----------|-------------| | `symbol_info(symbol)` | Get symbol information | | `symbol_info_tick(symbol)` | Get current tick for symbol | | `symbols_get()` | Get all available symbols | | `symbol_select(symbol, enable)` | Select/deselect symbol in Market Watch | ### Market Data | Function | Description | |----------|-------------| | `copy_rates_from_pos(symbol, timeframe, start_pos, count)` | Copy bars from position | | `copy_rates_from(symbol, timeframe, date_from, count)` | Copy bars from date | | `copy_rates_range(symbol, timeframe, date_from, date_to)` | Copy bars in range | | `copy_ticks_from(symbol, from, count, flags)` | Copy ticks from time | | `copy_ticks_range(symbol, from, to, flags)` | Copy ticks in range | ### Positions & Orders | Function | Description | |----------|-------------| | `positions_total()` | Get total number of open positions | | `positions_get(symbol)` | Get open positions | | `orders_total()` | Get total number of pending orders | | `orders_get(symbol)` | Get pending orders | ### History | Function | Description | |----------|-------------| | `history_deals_total(from, to)` | Get total number of deals in range | | `history_deals_get(from, to)` | Get deals in range | | `history_orders_total(from, to)` | Get total number of orders in range | | `history_orders_get(from, to)` | Get orders in range | ### Market Depth | Function | Description | |----------|-------------| | `market_book_add(symbol)` | Subscribe to market depth | | `market_book_get(symbol)` | Get market depth data | | `market_book_release(symbol)` | Unsubscribe from market depth | ### Trading Calculations | Function | Description | |----------|-------------| | `order_calc_margin(action, symbol, volume, price)` | Calculate required margin (local calculation) | | `order_calc_profit(action, symbol, volume, price_open, price_close)` | Calculate expected profit (local calculation) | ### Not Implemented | Function | Status | |----------|--------| | `order_check(request)` | TODO - Check trade request validity | | `order_send(request)` | TODO - Send trade request to MT5 | ## Implementation Notes ### Local Calculation for `order_calc_margin` and `order_calc_profit` Unlike `go-mt5` which sends commands 202/203 via named pipe, this library uses **local calculation** (same as Python `MetaTrader5` library): - `order_calc_margin`: `margin = volume × price × margin_initial / 4` - `order_calc_profit`: `profit = volume × (price_close - price_open) × trade_contract_size` This approach avoids the "pipe closed" error that occurs with MT5 Build 5836+ when using IPC for these commands. ## Requirements - Rust 2021 edition - Windows OS (named pipe IPC is Windows-specific) - MT5 terminal must be running ## License MIT