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
value
source§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
.