pub struct Position {Show 50 fields
pub account_id: String,
pub conid: String,
pub symbol: String,
pub description: Option<String>,
pub asset_category: AssetCategory,
pub cusip: Option<String>,
pub isin: Option<String>,
pub figi: Option<String>,
pub security_id: Option<String>,
pub security_id_type: Option<String>,
pub multiplier: Option<Decimal>,
pub strike: Option<Decimal>,
pub expiry: Option<NaiveDate>,
pub put_call: Option<PutCall>,
pub underlying_conid: Option<String>,
pub underlying_symbol: Option<String>,
pub quantity: Decimal,
pub mark_price: Decimal,
pub position_value: Decimal,
pub side: Option<String>,
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 currency: String,
pub fx_rate_to_base: Option<Decimal>,
pub report_date: NaiveDate,
pub holding_period_date_time: Option<String>,
pub open_date_time: Option<String>,
pub originating_transaction_id: Option<String>,
pub code: Option<String>,
pub originating_order_id: Option<String>,
pub issuer: Option<String>,
pub issuer_country_code: Option<String>,
pub sub_category: Option<String>,
pub listing_exchange: Option<String>,
pub underlying_listing_exchange: Option<String>,
pub underlying_security_id: Option<String>,
pub accrued_int: Option<Decimal>,
pub principal_adjust_factor: Option<Decimal>,
pub serial_number: Option<String>,
pub delivery_type: Option<String>,
pub commodity_type: Option<String>,
pub fineness: Option<Decimal>,
pub weight: Option<String>,
pub level_of_detail: Option<String>,
pub model: Option<String>,
pub acct_alias: Option<String>,
pub vesting_date: Option<NaiveDate>,
}Expand description
An open position snapshot
Represents a single open position at the end of the reporting period. Fields are organized into CORE (essential for tax/portfolio analytics) and EXTENDED (metadata) sections.
§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
cusip: Option<String>CUSIP
isin: Option<String>ISIN
figi: Option<String>FIGI
security_id: Option<String>Security ID
security_id_type: Option<String>Security ID type
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
underlying_conid: Option<String>Underlying contract ID
underlying_symbol: Option<String>Underlying symbol
quantity: DecimalPosition quantity (negative for short)
mark_price: DecimalMark price (current market price)
position_value: DecimalPosition value (quantity * mark_price * multiplier)
side: Option<String>Side (Long/Short)
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
currency: StringCurrency
fx_rate_to_base: Option<Decimal>FX rate to base currency
report_date: NaiveDateDate of this position snapshot
holding_period_date_time: Option<String>Holding period date/time (for long-term vs short-term determination)
open_date_time: Option<String>When position was opened
originating_transaction_id: Option<String>Originating transaction ID
code: Option<String>Position code (may contain tax-related codes)
originating_order_id: Option<String>Originating order ID (links to opening trade)
issuer: Option<String>Issuer
issuer_country_code: Option<String>Issuer country code
sub_category: Option<String>Sub-category
listing_exchange: Option<String>Listing exchange
underlying_listing_exchange: Option<String>Underlying listing exchange
underlying_security_id: Option<String>Underlying security ID
accrued_int: Option<Decimal>Accrued interest
principal_adjust_factor: Option<Decimal>Principal adjust factor
serial_number: Option<String>Serial number (for physical delivery)
delivery_type: Option<String>Delivery type
commodity_type: Option<String>Commodity type
fineness: Option<Decimal>Fineness (for precious metals)
weight: Option<String>Weight
level_of_detail: Option<String>Level of detail
model: Option<String>Model (for model portfolios)
acct_alias: Option<String>Account alias
vesting_date: Option<NaiveDate>Vesting date (for restricted stock)