use ibapi::client::blocking::Client;
use ibapi::contracts::Contract;
use ibapi::{market_data::TradingHours, Error};
fn main() {
env_logger::init();
let connection_url = "127.0.0.1:4002";
let client = Client::connect(connection_url, 100).expect("connection to TWS failed!");
let contract = Contract::stock("AAPL").build();
'retry: loop {
let subscription = client
.realtime_bars(&contract)
.trading_hours(TradingHours::Extended)
.subscribe()
.expect("realtime bars request failed!");
for bar in subscription.iter_data() {
match bar {
Ok(bar) => println!("bar: {bar:?}"),
Err(Error::ConnectionReset) => {
eprintln!("Connection reset. Retrying stream...");
continue 'retry;
}
Err(e) => {
eprintln!("error: {e}");
break 'retry;
}
}
}
break;
}
}