//! Quick test to verify DBN price scaling use dbn::decode::dbn::Decoder; use dbn::decode::DecodeRecordRef; use std::fs::File; use std::io::BufReader; fn main() -> anyhow::Result<()> { let file = File::open("test_data/real/databento/ml_training_small/6E.FUT_ohlcv-1m_2024-01-04.dbn")?; let reader = BufReader::new(file); let mut decoder = Decoder::new(reader)?; println!("Checking first 5 OHLCV records:\n"); let mut count = 0; loop { if count >= 5 { break; } match decoder.decode_record_ref() { Ok(Some(record)) => { if let Ok(record_enum) = record.as_enum() { if let dbn::RecordRefEnum::Ohlcv(ohlcv) = record_enum { count += 1; println!("Record {}:", count); println!(" Raw values: open={}, high={}, low={}, close={}", ohlcv.open, ohlcv.high, ohlcv.low, ohlcv.close); let open_scaled = ohlcv.open as f64 * 1e-9; let high_scaled = ohlcv.high as f64 * 1e-9; let low_scaled = ohlcv.low as f64 * 1e-9; let close_scaled = ohlcv.close as f64 * 1e-9; println!(" Scaled (1e-9): open={:.6}, high={:.6}, low={:.6}, close={:.6}", open_scaled, high_scaled, low_scaled, close_scaled); // Check if prices are in reasonable range for Euro FX futures (1.05-1.20) if close_scaled < 0.5 || close_scaled > 2.0 { println!(" ⚠️ WARNING: Price out of expected range for 6E.FUT (0.5-2.0)"); } else { println!(" ✅ Price in expected range for 6E.FUT"); } println!(); } } } Ok(None) => break, Err(e) => { eprintln!("Error decoding: {}", e); break; } } } Ok(()) }