pub struct UpCaptureRatio { /* private fields */ }Expand description
Calculates the up capture ratio of portfolio returns relative to a benchmark.
The up capture ratio measures how the portfolio performed, on average, during the periods when the benchmark return was positive. It is the ratio of the portfolio’s geometric annualized return to the benchmark’s geometric annualized return, both computed over the up-market subset only:
UpCapture = annualized_return(portfolio | benchmark > 0) / annualized_return(benchmark | benchmark > 0)
where each side’s annualized return is the geometric (CAGR-style) value
(prod(1 + x_i))^(period / m) - 1 and m is the number of up-market periods (the
size of the filtered subset, not the full aligned length). The period defaults to
252 trading days. A value above 1.0 means the portfolio outperformed the benchmark
in up markets.
This is the empyrical.up_capture convention (geometric annualized-return ratio over
the benchmark > 0 subset). Note that this differs from the Morningstar definition,
which uses a ratio of cumulative (non-annualized) returns; the two coincide only
when both subsets contain the same number of periods.
§References
- empyrical
up_capture/capture/annual_return(https://github.com/quantopian/empyrical). - CFA Institute Investment Foundations, 3rd Edition
Implementations§
Source§impl UpCaptureRatio
impl UpCaptureRatio
Sourcepub fn new(period: Option<usize>) -> Self
pub fn new(period: Option<usize>) -> Self
Creates a new UpCaptureRatio instance.
Trait Implementations§
Source§impl Clone for UpCaptureRatio
impl Clone for UpCaptureRatio
Source§fn clone(&self) -> UpCaptureRatio
fn clone(&self) -> UpCaptureRatio
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for UpCaptureRatio
impl Debug for UpCaptureRatio
impl DerefToPyAny for UpCaptureRatio
Source§impl Display for UpCaptureRatio
impl Display for UpCaptureRatio
Source§impl<'a, 'py> FromPyObject<'a, 'py> for UpCaptureRatiowhere
Self: Clone,
impl<'a, 'py> FromPyObject<'a, 'py> for UpCaptureRatiowhere
Self: Clone,
Source§impl<'py> IntoPyObject<'py> for UpCaptureRatio
impl<'py> IntoPyObject<'py> for UpCaptureRatio
Source§type Target = UpCaptureRatio
type Target = UpCaptureRatio
Source§type Output = Bound<'py, <UpCaptureRatio as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <UpCaptureRatio as IntoPyObject<'py>>::Target>
Source§fn into_pyobject(
self,
py: Python<'py>,
) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
Source§impl PortfolioStatistic for UpCaptureRatio
impl PortfolioStatistic for UpCaptureRatio
type Item = f64
Source§fn name(&self) -> String
fn name(&self) -> String
Source§fn calculate_from_returns(&self, _returns: &Returns) -> Option<Self::Item>
fn calculate_from_returns(&self, _returns: &Returns) -> Option<Self::Item>
Source§fn calculate_from_realized_pnls(
&self,
_realized_pnls: &[f64],
) -> Option<Self::Item>
fn calculate_from_realized_pnls( &self, _realized_pnls: &[f64], ) -> Option<Self::Item>
Source§fn calculate_from_positions(
&self,
_positions: &[Position],
) -> Option<Self::Item>
fn calculate_from_positions( &self, _positions: &[Position], ) -> Option<Self::Item>
Source§fn calculate_from_returns_with_benchmark(
&self,
returns: &Returns,
benchmark: &Returns,
) -> Option<Self::Item>
fn calculate_from_returns_with_benchmark( &self, returns: &Returns, benchmark: &Returns, ) -> Option<Self::Item>
Source§fn calculate_from_orders(
&self,
orders: Vec<Box<dyn Order>>,
) -> Option<Self::Item>
fn calculate_from_orders( &self, orders: Vec<Box<dyn Order>>, ) -> Option<Self::Item>
Source§fn align_returns(&self, a: &Returns, b: &Returns) -> (Vec<f64>, Vec<f64>)
fn align_returns(&self, a: &Returns, b: &Returns) -> (Vec<f64>, Vec<f64>)
Source§fn check_valid_returns(&self, returns: &Returns) -> bool
fn check_valid_returns(&self, returns: &Returns) -> bool
Source§fn downsample_to_daily_bins(&self, returns: &Returns) -> Returns
fn downsample_to_daily_bins(&self, returns: &Returns) -> Returns
Source§fn calculate_std(&self, returns: &Returns) -> f64
fn calculate_std(&self, returns: &Returns) -> f64
Source§impl PyClass for UpCaptureRatio
impl PyClass for UpCaptureRatio
Source§impl PyClassImpl for UpCaptureRatio
impl PyClassImpl for UpCaptureRatio
Source§const IS_BASETYPE: bool = false
const IS_BASETYPE: bool = false
Source§const IS_SUBCLASS: bool = false
const IS_SUBCLASS: bool = false
Source§const IS_MAPPING: bool = false
const IS_MAPPING: bool = false
Source§const IS_SEQUENCE: bool = false
const IS_SEQUENCE: bool = false
Source§const IS_IMMUTABLE_TYPE: bool = false
const IS_IMMUTABLE_TYPE: bool = false
Source§const RAW_DOC: &'static CStr = /// Calculates the up capture ratio of portfolio returns relative to a benchmark.
///
/// The up capture ratio measures how the portfolio performed, on average, during the
/// periods when the benchmark return was positive. It is the ratio of the portfolio's
/// geometric annualized return to the benchmark's geometric annualized return, both
/// computed over the up-market subset only:
///
/// `UpCapture = annualized_return(portfolio | benchmark > 0) / annualized_return(benchmark | benchmark > 0)`
///
/// where each side's annualized return is the geometric (CAGR-style) value
/// `(prod(1 + x_i))^(period / m) - 1` and `m` is the number of up-market periods (the
/// size of the filtered subset, not the full aligned length). The period defaults to
/// 252 trading days. A value above 1.0 means the portfolio outperformed the benchmark
/// in up markets.
///
/// This is the `empyrical.up_capture` convention (geometric annualized-return ratio over
/// the `benchmark > 0` subset). Note that this differs from the Morningstar definition,
/// which uses a ratio of *cumulative* (non-annualized) returns; the two coincide only
/// when both subsets contain the same number of periods.
///
/// # References
///
/// - empyrical `up_capture` / `capture` / `annual_return`
/// (<https://github.com/quantopian/empyrical>).
/// - CFA Institute Investment Foundations, 3rd Edition
const RAW_DOC: &'static CStr = /// Calculates the up capture ratio of portfolio returns relative to a benchmark. /// /// The up capture ratio measures how the portfolio performed, on average, during the /// periods when the benchmark return was positive. It is the ratio of the portfolio's /// geometric annualized return to the benchmark's geometric annualized return, both /// computed over the up-market subset only: /// /// `UpCapture = annualized_return(portfolio | benchmark > 0) / annualized_return(benchmark | benchmark > 0)` /// /// where each side's annualized return is the geometric (CAGR-style) value /// `(prod(1 + x_i))^(period / m) - 1` and `m` is the number of up-market periods (the /// size of the filtered subset, not the full aligned length). The period defaults to /// 252 trading days. A value above 1.0 means the portfolio outperformed the benchmark /// in up markets. /// /// This is the `empyrical.up_capture` convention (geometric annualized-return ratio over /// the `benchmark > 0` subset). Note that this differs from the Morningstar definition, /// which uses a ratio of *cumulative* (non-annualized) returns; the two coincide only /// when both subsets contain the same number of periods. /// /// # References /// /// - empyrical `up_capture` / `capture` / `annual_return` /// (<https://github.com/quantopian/empyrical>). /// - CFA Institute Investment Foundations, 3rd Edition
Source§const DOC: &'static CStr
const DOC: &'static CStr
text_signature if a constructor is defined. Read moreSource§type Layout = <<UpCaptureRatio as PyClassImpl>::BaseNativeType as PyClassBaseType>::Layout<UpCaptureRatio>
type Layout = <<UpCaptureRatio as PyClassImpl>::BaseNativeType as PyClassBaseType>::Layout<UpCaptureRatio>
Source§type ThreadChecker = NoopThreadChecker
type ThreadChecker = NoopThreadChecker
type Inventory = Pyo3MethodsInventoryForUpCaptureRatio
Source§type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
Source§type BaseNativeType = PyAny
type BaseNativeType = PyAny
PyAny by default, and when you declare
#[pyclass(extends=PyDict)], it’s PyDict.fn items_iter() -> PyClassItemsIter
fn lazy_type_object() -> &'static LazyTypeObject<Self>
§fn dict_offset() -> Option<PyObjectOffset>
fn dict_offset() -> Option<PyObjectOffset>
§fn weaklist_offset() -> Option<PyObjectOffset>
fn weaklist_offset() -> Option<PyObjectOffset>
Source§impl PyClassNewTextSignature for UpCaptureRatio
impl PyClassNewTextSignature for UpCaptureRatio
const TEXT_SIGNATURE: &'static str = "(period=None)"
Source§impl PyStubType for UpCaptureRatio
impl PyStubType for UpCaptureRatio
Source§fn type_output() -> TypeInfo
fn type_output() -> TypeInfo
§fn type_input() -> TypeInfo
fn type_input() -> TypeInfo
Source§impl PyTypeInfo for UpCaptureRatio
impl PyTypeInfo for UpCaptureRatio
Source§const NAME: &str = <Self as ::pyo3::PyClass>::NAME
const NAME: &str = <Self as ::pyo3::PyClass>::NAME
prefer using ::type_object(py).name() to get the correct runtime value
Source§const MODULE: Option<&str> = <Self as ::pyo3::impl_::pyclass::PyClassImpl>::MODULE
const MODULE: Option<&str> = <Self as ::pyo3::impl_::pyclass::PyClassImpl>::MODULE
prefer using ::type_object(py).module() to get the correct runtime value
Source§fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
§fn type_object(py: Python<'_>) -> Bound<'_, PyType>
fn type_object(py: Python<'_>) -> Bound<'_, PyType>
§fn is_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type or a subclass of this type.§fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type.Auto Trait Implementations§
impl Freeze for UpCaptureRatio
impl RefUnwindSafe for UpCaptureRatio
impl Send for UpCaptureRatio
impl Sync for UpCaptureRatio
impl Unpin for UpCaptureRatio
impl UnsafeUnpin for UpCaptureRatio
impl UnwindSafe for UpCaptureRatio
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<'py, T> FromPyObjectOwned<'py> for Twhere
T: for<'a> FromPyObject<'a, 'py>,
§impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
§fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
self into an owned Python object, dropping type information.§fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
self into an owned Python object, dropping type information and unbinding it
from the 'py lifetime.§fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
self into a Python object. Read more§impl<'py, T> IntoPyObjectNautilusExt<'py> for Twhere
T: IntoPyObjectExt<'py>,
impl<'py, T> IntoPyObjectNautilusExt<'py> for Twhere
T: IntoPyObjectExt<'py>,
§fn into_py_any_unwrap(self, py: Python<'py>) -> Py<PyAny>where
Self: IntoPyObject<'py, Error = !>,
fn into_py_any_unwrap(self, py: Python<'py>) -> Py<PyAny>where
Self: IntoPyObject<'py, Error = !>,
self into a [Py<PyAny>] when the underlying conversion is infallible.§impl<T> PyErrArguments for T
impl<T> PyErrArguments for T
§impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
§fn type_check(object: &Bound<'_, PyAny>) -> bool
fn type_check(object: &Bound<'_, PyAny>) -> bool
§fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
isinstance and issubclass function. Read more