//! DBN to CSV Export Example //! //! Exports ES.FUT DBN data to CSV format for external analysis. use anyhow::Result; use backtesting_service::dbn_repository::DbnMarketDataRepository; use backtesting_service::repositories::MarketDataRepository; use std::collections::HashMap; use std::fs::File; use std::io::Write; #[tokio::main] async fn main() -> Result<()> { println!("ES.FUT DBN to CSV Exporter"); println!("==========================\n"); // Load data let mut file_mapping = HashMap::new(); file_mapping.insert( "ES.FUT".to_string(), "test_data/real/databento/ES.FUT_ohlcv-1m_2024-01-02.dbn".to_string(), ); let repo = DbnMarketDataRepository::new(file_mapping).await?; let symbols = vec!["ES.FUT".to_string()]; let start_time = 1704153600_000_000_000i64; // 2024-01-02 00:00:00 UTC let end_time = 1704240000_000_000_000i64; // 2024-01-03 00:00:00 UTC println!("šŸ“‚ Loading data from DBN file..."); let data = repo .load_historical_data(&symbols, start_time, end_time) .await?; if data.is_empty() { println!("āŒ ERROR: No data loaded!"); return Ok(()); } println!("āœ… Loaded {} bars", data.len()); // Export to CSV let output_path = "ES.FUT_2024-01-02.csv"; let mut file = File::create(output_path)?; println!("\nšŸ“ Writing CSV file: {}", output_path); // Write header with detailed column descriptions writeln!( file, "timestamp_utc,timestamp_unix_ns,symbol,open,high,low,close,volume" )?; // Write data for bar in &data { writeln!( file, "{},{},{},{},{},{},{},{}", bar.timestamp.format("%Y-%m-%d %H:%M:%S"), bar.timestamp.timestamp_nanos_opt().unwrap_or(0), bar.symbol, bar.open, bar.high, bar.low, bar.close, bar.volume )?; } println!( "āœ… Successfully exported {} bars to {}", data.len(), output_path ); println!(); // Print sample rows println!("šŸ“‹ Sample Data (first 5 rows):"); println!( "{:<20} {:<10} {:>8} {:>8} {:>8} {:>8} {:>10}", "Timestamp", "Symbol", "Open", "High", "Low", "Close", "Volume" ); println!("{}", "-".repeat(85)); for bar in data.iter().take(5) { println!( "{:<20} {:<10} {:>8.2} {:>8.2} {:>8.2} {:>8.2} {:>10.0}", bar.timestamp.format("%Y-%m-%d %H:%M:%S"), bar.symbol, bar.open, bar.high, bar.low, bar.close, bar.volume ); } println!("\nšŸ’” Usage Examples:"); println!(" • Python pandas: df = pd.read_csv('{}') ", output_path); println!(" • R: data <- read.csv('{}') ", output_path); println!(" • Excel: Open file directly"); println!(" • SQL: LOAD DATA INFILE '{}' INTO TABLE ...", output_path); println!(); println!("šŸ“Š Analysis Tools:"); println!(" • Calculate moving averages"); println!(" • Plot candlestick charts"); println!(" • Compute technical indicators (RSI, MACD, Bollinger Bands)"); println!(" • Run statistical analysis"); Ok(()) }