pub struct Position {Show 21 fields
pub account_id: String,
pub conid: String,
pub symbol: String,
pub description: Option<String>,
pub asset_category: AssetCategory,
pub multiplier: Option<Decimal>,
pub strike: Option<Decimal>,
pub expiry: Option<NaiveDate>,
pub put_call: Option<PutCall>,
pub quantity: Decimal,
pub mark_price: Decimal,
pub position_value: Decimal,
pub open_price: Option<Decimal>,
pub cost_basis_price: Option<Decimal>,
pub cost_basis_money: Option<Decimal>,
pub fifo_pnl_unrealized: Option<Decimal>,
pub percent_of_nav: Option<Decimal>,
pub side: Option<String>,
pub currency: String,
pub fx_rate_to_base: Option<Decimal>,
pub report_date: NaiveDate,
}Expand description
An open position snapshot
Represents a single open position at the end of the reporting period. Includes quantity, current market price, cost basis, and unrealized P&L.
§Example
use ib_flex::parse_activity_flex;
use rust_decimal::Decimal;
let xml = std::fs::read_to_string("activity.xml")?;
let statement = parse_activity_flex(&xml)?;
for position in &statement.positions.items {
println!("{}: {} shares", position.symbol, position.quantity);
println!(" Current price: {}", position.mark_price);
println!(" Position value: {}", position.position_value);
// Calculate gain/loss percentage
if let Some(cost_basis) = position.cost_basis_money {
let current_value = position.position_value;
let gain_pct = ((current_value - cost_basis) / cost_basis) * Decimal::from(100);
println!(" Gain: {:.2}%", gain_pct);
}
// Show unrealized P&L
if let Some(pnl) = position.fifo_pnl_unrealized {
println!(" Unrealized P&L: {}", pnl);
}
// Check if short position
if position.quantity < Decimal::ZERO {
println!(" SHORT POSITION");
}
}Fields§
§account_id: StringIB account number
conid: StringIB contract ID
symbol: StringTicker symbol
description: Option<String>Security description
asset_category: AssetCategoryAsset category
multiplier: Option<Decimal>Contract multiplier
strike: Option<Decimal>Strike (for options)
expiry: Option<NaiveDate>Expiry (for options/futures)
put_call: Option<PutCall>Put or Call
quantity: DecimalPosition quantity (negative for short)
mark_price: DecimalMark price (current market price)
position_value: DecimalPosition value (quantity * mark_price * multiplier)
open_price: Option<Decimal>Open price
cost_basis_price: Option<Decimal>Cost basis price per share/contract
cost_basis_money: Option<Decimal>Total cost basis
fifo_pnl_unrealized: Option<Decimal>FIFO unrealized P&L
Percent of NAV
side: Option<String>Side (Long/Short)
currency: StringCurrency
fx_rate_to_base: Option<Decimal>FX rate to base currency
report_date: NaiveDateDate of this position snapshot
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Position
impl<'de> Deserialize<'de> for Position
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl StructuralPartialEq for Position
Auto Trait Implementations§
impl Freeze for Position
impl RefUnwindSafe for Position
impl Send for Position
impl Sync for Position
impl Unpin for Position
impl UnwindSafe for Position
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more