nautilus_analysis::analyzer

Struct PortfolioAnalyzer

Source
#[repr(C)]
pub struct PortfolioAnalyzer { /* private fields */ }
Expand description

Analyzes portfolio performance and calculates various statistics.

The PortfolioAnalyzer tracks account balances, positions, and realized PnLs to provide comprehensive portfolio analysis including returns, PnL calculations, and customizable statistics.

Implementations§

Source§

impl PortfolioAnalyzer

Source

pub fn new() -> Self

Creates a new PortfolioAnalyzer instance.

Starts with empty state.

Source

pub fn register_statistic(&mut self, statistic: Statistic)

Registers a new portfolio statistic for calculation.

Source

pub fn deregister_statistic(&mut self, statistic: Statistic)

Removes a specific statistic from calculation.

Source

pub fn deregister_statistics(&mut self)

Removes all registered statistics.

Source

pub fn reset(&mut self)

Resets all analysis data to initial state.

Source

pub fn currencies(&self) -> Vec<&Currency>

Returns all tracked currencies.

Source

pub fn statistic(&self, name: &str) -> Option<&Statistic>

Retrieves a specific statistic by name.

Source

pub const fn returns(&self) -> &Returns

Returns all calculated returns.

Source

pub fn calculate_statistics( &mut self, account: &dyn Account, positions: &[Position], )

Calculates statistics based on account and position data.

Source

pub fn add_positions(&mut self, positions: &[Position])

Adds new positions for analysis.

Source

pub fn add_trade(&mut self, position_id: &PositionId, pnl: &Money)

Records a trade’s PnL.

Source

pub fn add_return(&mut self, timestamp: UnixNanos, value: f64)

Records a return at a specific timestamp.

Source

pub fn realized_pnls( &self, currency: Option<&Currency>, ) -> Option<Vec<(PositionId, f64)>>

Retrieves realized PnLs for a specific currency.

Source

pub fn total_pnl( &self, currency: Option<&Currency>, unrealized_pnl: Option<&Money>, ) -> Result<f64, &'static str>

Calculates total PnL including unrealized PnL if provided.

Source

pub fn total_pnl_percentage( &self, currency: Option<&Currency>, unrealized_pnl: Option<&Money>, ) -> Result<f64, &'static str>

Calculates total PnL as a percentage of starting balance.

Source

pub fn get_performance_stats_pnls( &self, currency: Option<&Currency>, unrealized_pnl: Option<&Money>, ) -> Result<HashMap<String, f64>, &'static str>

Gets all PnL-related performance statistics.

Source

pub fn get_performance_stats_returns(&self) -> HashMap<String, f64>

Gets all return-based performance statistics.

Source

pub fn get_performance_stats_general(&self) -> HashMap<String, f64>

Gets general portfolio statistics.

Source

pub fn get_stats_pnls_formatted( &self, currency: Option<&Currency>, unrealized_pnl: Option<&Money>, ) -> Result<Vec<String>, String>

Gets formatted PnL statistics as strings.

Source

pub fn get_stats_returns_formatted(&self) -> Vec<String>

Gets formatted return statistics as strings.

Source

pub fn get_stats_general_formatted(&self) -> Vec<String>

Gets formatted general statistics as strings.

Trait Implementations§

Source§

impl Debug for PortfolioAnalyzer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for PortfolioAnalyzer

Source§

fn default() -> Self

Creates a new default PortfolioAnalyzer instance.

Source§

impl IntoPy<Py<PyAny>> for PortfolioAnalyzer

Source§

fn into_py(self, py: Python<'_>) -> PyObject

Performs the conversion.
Source§

impl PyClass for PortfolioAnalyzer

Source§

type Frozen = False

Whether the pyclass is frozen. Read more
Source§

impl PyClassImpl for PortfolioAnalyzer

Source§

const IS_BASETYPE: bool = false

#[pyclass(subclass)]
Source§

const IS_SUBCLASS: bool = false

#[pyclass(extends=…)]
Source§

const IS_MAPPING: bool = false

#[pyclass(mapping)]
Source§

const IS_SEQUENCE: bool = false

#[pyclass(sequence)]
Source§

type BaseType = PyAny

Base class
Source§

type ThreadChecker = SendablePyClass<PortfolioAnalyzer>

This handles following two situations: Read more
Source§

type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild

Immutable or mutable
Source§

type Dict = PyClassDummySlot

Specify this class has #[pyclass(dict)] or not.
Source§

type WeakRef = PyClassDummySlot

Specify this class has #[pyclass(weakref)] or not.
Source§

type BaseNativeType = PyAny

The closest native ancestor. This is PyAny by default, and when you declare #[pyclass(extends=PyDict)], it’s PyDict.
Source§

fn items_iter() -> PyClassItemsIter

Source§

fn doc(py: Python<'_>) -> PyResult<&'static CStr>

Rendered class doc
Source§

fn lazy_type_object() -> &'static LazyTypeObject<Self>

§

fn dict_offset() -> Option<isize>

§

fn weaklist_offset() -> Option<isize>

Source§

impl<'a, 'py> PyFunctionArgument<'a, 'py> for &'a PortfolioAnalyzer

Source§

type Holder = Option<PyRef<'py, PortfolioAnalyzer>>

Source§

fn extract( obj: &'a Bound<'py, PyAny>, holder: &'a mut Self::Holder, ) -> PyResult<Self>

Source§

impl<'a, 'py> PyFunctionArgument<'a, 'py> for &'a mut PortfolioAnalyzer

Source§

type Holder = Option<PyRefMut<'py, PortfolioAnalyzer>>

Source§

fn extract( obj: &'a Bound<'py, PyAny>, holder: &'a mut Self::Holder, ) -> PyResult<Self>

Source§

impl PyTypeInfo for PortfolioAnalyzer

Source§

const NAME: &'static str = "PortfolioAnalyzer"

Class name.
Source§

const MODULE: Option<&'static str> = _

Module name, if any.
Source§

fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject

Returns the PyTypeObject instance for this type.
§

fn type_object_bound(py: Python<'_>) -> Bound<'_, PyType>

Returns the safe abstraction over the type object.
§

fn is_type_of_bound(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type or a subclass of this type.
§

fn is_exact_type_of_bound(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type.
Source§

impl DerefToPyAny for PortfolioAnalyzer

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> PyErrArguments for T
where T: IntoPy<Py<PyAny>> + Send + Sync,

§

fn arguments(self, py: Python<'_>) -> Py<PyAny>

Arguments for exception
§

impl<T> PyTypeCheck for T
where T: PyTypeInfo,

§

const NAME: &'static str = <T as PyTypeInfo>::NAME

Name of self. This is used in error messages, for example.
§

fn type_check(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of Self, which may include a subtype. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Ungil for T
where T: Send,