← All examples
Example 05
Indicators
Causal indicators on a short series: each value uses only what was known
- Category
- Pure: runs anywhere
- Permissions
- None
- Language
>=0.1.1, <0.2.0
Source
// Category: pure // Permissions: none // Causal indicators on a short series: each value uses only what was known // at its index, and "not enough data yet" is None, never 0. The SMA and EMA // are the same definitions TTT's strategy engine uses. Indicators are // statistics, so the series are Float, and the type says so: a decimal // literal is a Decimal unless its type says otherwise. lang ">=0.1.1, <0.2.0"; import std.ind; import std.stats; fn main() { let closes: List<Float> = [100.0, 101.0, 102.5, 101.5, 103.0, 104.5, 104.0, 106.0]; let highs: List<Float> = [100.5, 101.8, 103.0, 102.4, 103.6, 105.0, 105.2, 106.4]; let lows: List<Float> = [99.4, 100.2, 101.6, 100.9, 101.8, 103.4, 103.5, 104.6]; let volumes: List<Float> = [12.0, 8.0, 15.0, 6.0, 9.0, 20.0, 7.0, 11.0]; print(ind.sma(closes, 3)); print(ind.ema(closes, 3)); print(ind.atr(highs, lows, closes, 3)); print(ind.vwap(closes, volumes)); let fast = ind.latest(ind.ema(closes, 3)).expect("enough data for the fast EMA"); let slow = ind.latest(ind.sma(closes, 5)).expect("enough data for the slow SMA"); print(if fast > slow { "fast above slow" } else { "fast below slow" }); let returns = ind.known(ind.log_returns(closes)); print(to_string(returns.len()) + " log returns, sample stdev " + to_string(stats.stdev(returns))); print(ind.latest(ind.sma(closes, 20))); } // expect-output: [None, None, Some(101.16666666666667), Some(101.66666666666667), Some(102.33333333333333), Some(103.0), Some(103.83333333333333), Some(104.83333333333333)] // expect-output: [None, None, Some(101.16666666666667), Some(101.33333333333334), Some(102.16666666666667), Some(103.33333333333334), Some(103.66666666666667), Some(104.83333333333334)] // expect-output: [None, None, Some(1.6333333333333304), Some(1.6222222222222182), Some(1.781481481481477), Some(1.854320987654318), Some(1.802880658436213), Some(2.001920438957477)] // expect-output: [Some(100.0), Some(100.4), Some(101.3), Some(101.32926829268293), Some(101.63), Some(102.45), Some(102.5909090909091), Some(103.01704545454545)] // expect-output: fast above slow // expect-output: 7 log returns, sample stdev Some(0.011086869550630608) // expect-output: None