pub struct AfterTaxView {
pub strategy_return: f64,
pub benchmark_return: f64,
pub excess: f64,
pub strategy_tax: f64,
pub benchmark_tax: f64,
pub short_term_rate: f64,
pub long_term_rate: f64,
}Expand description
Every shape at the root as well, because a window names a view on nearly
every line and arvo_api::research::StudyView would be noise. The names
do not collide: proto has no overloading and neither does this.
The dividend bias, measured.
On split-adjusted prices no dividend is paid to anything in a backtest.
Both sides forgo them — but the benchmark held through every ex-date and a
rule in the market some of the time did not, so the margin between them is
overstated in the strategy’s favour, and [Self::corrected_excess] takes it
off. On total-return prices the distributions are already in the returns and
the same measurement describes what the margin is made of instead.
A study’s result after tax. See arvo_research::tax for what is modelled.
Fields§
§strategy_return: f64§benchmark_return: f64§excess: f64strategy_return - benchmark_return: the margin a taxable account
would actually have kept.
strategy_tax: f64§benchmark_tax: f64§short_term_rate: f64§long_term_rate: f64Trait Implementations§
Source§impl Clone for AfterTaxView
impl Clone for AfterTaxView
impl Copy for AfterTaxView
Source§impl Debug for AfterTaxView
impl Debug for AfterTaxView
Source§impl Default for AfterTaxView
impl Default for AfterTaxView
Source§impl<'de> Deserialize<'de> for AfterTaxView
impl<'de> Deserialize<'de> for AfterTaxView
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>,
Source§impl Message for AfterTaxView
impl Message for AfterTaxView
Source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
Source§fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self. Read moreSource§fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self.