本文へ移動
← すべてのサンプル

サンプル 05

Indicators

Causal indicators on a short series: each value uses only what was known

カテゴリ
Pure:どこでも動く
権限
なし
言語
>=0.1.1, <0.2.0

ソース

// 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