pub struct ADI { /* private fields */ }Expand description
Accumulation Distribution Index of specified length for timeseries of OHLCV
CLV ranges from -1.0 when the close is the low of the day, to +1.0 when it’s the high.
For instance if the close is 3/4 the way up the range then CLV is +0.5.
The accumulation/distribution index adds up volume multiplied by the CLV factor, i.e.
The name accumulation/distribution comes from the idea that during accumulation buyers are in control and the price will be bid up through the day, or will make a recovery if sold down, in either case more often finishing near the day’s high than the low. The opposite applies during distribution.
The accumulation/distribution index is similar to on balance volume, but acc/dist is based on the close within the day’s range, instead of the close-to-close up or down that the latter uses.
Can be used by a shortcut ADI
Used in indicators: Chaikin Money Flow, Chaikin Oscillator
§Parameters
Has a single parameter length: PeriodType
When length == 0, ADI becomes windowless. That means full ADI value accumulation over time.
When length > 0, ADI will be calculated over the last length values.
§Input type
Input type is reference to OHLCV
§Output type
Output type is ValueType
§Examples
use yata::prelude::*;
use yata::methods::ADI;
use yata::helpers::RandomCandles;
let mut candles = RandomCandles::default();
let mut windowless = ADI::new(0, &candles.first()).unwrap();
let mut windowed = ADI::new(3, &candles.first()).unwrap(); // <----- Window size 3
let candle = candles.next().unwrap();
assert_ne!(windowless.next(&candle), windowed.next(&candle));
let candle = candles.next().unwrap();
assert_ne!(windowless.next(&candle), windowed.next(&candle));
let candle = candles.next().unwrap();
assert!((windowless.next(&candle)-windowed.next(&candle)).abs() < 1e-5); // Must be equal here§Performance
O(1)
§See also
Implementations§
Trait Implementations§
Source§impl<'de> Deserialize<'de> for ADI
impl<'de> Deserialize<'de> for ADI
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 Method for ADI
impl Method for ADI
Source§fn new(length: Self::Params, candle: &Self::Input) -> Result<Self, Error>
fn new(length: Self::Params, candle: &Self::Input) -> Result<Self, Error>
parameters and initial value (simply first input value)Source§fn next(&mut self, candle: &Self::Input) -> Self::Output
fn next(&mut self, candle: &Self::Input) -> Self::Output
valueSource§fn with_history(
parameters: Self::Params,
initial_value: &Self::Input,
) -> Result<WithHistory<Self, Self::Output>, Error>
fn with_history( parameters: Self::Params, initial_value: &Self::Input, ) -> Result<WithHistory<Self, Self::Output>, Error>
parameters and initial value, wrapped by historical data holderSource§fn with_last_value(
parameters: Self::Params,
initial_value: &Self::Input,
) -> Result<WithLastValue<Self, Self::Output>, Error>
fn with_last_value( parameters: Self::Params, initial_value: &Self::Input, ) -> Result<WithLastValue<Self, Self::Output>, Error>
parameters and initial value, wrapped by last produced value holderSource§fn memsize(&self) -> (usize, usize)where
Self: Sized,
fn memsize(&self) -> (usize, usize)where
Self: Sized,
(size, align)Source§fn new_apply<T, S>(
parameters: Self::Params,
sequence: &mut S,
) -> Result<(), Error>
fn new_apply<T, S>( parameters: Self::Params, sequence: &mut S, ) -> Result<(), Error>
Method instance and applies it to the sequence.