kestrel-chartkitv0.41.0

CASOON Open Source

Price bars in, readings out.

kestrel-chartkit is technical analysis as plain, testable Rust. Feed it price bars one at a time and it returns indicator values, the current market regime and a composite signal that explains itself. It computes, nothing more: you bring the bars, a renderer of your choice draws.

cargo add kestrel-chartkit --git https://github.com/casoon/kestrel-chartkit --tag v0.41.0
in developmentv0.41.0BUSL-1.1Rust 1.87+
Terminal: cargo run -q --example basic_indicator streams 16 closing prices into RSI(14). Bars 0 to 13, closes from 44.34 to 46.28, print RSI(14)=<warming up>; bar 14 at close 46.28 prints RSI(14)=70.46 and bar 15 at close 46.00 prints RSI(14)=68.36.

From bars to a chart

The same streaming calls behind a whole chart: EMA 20 and EMA 50, support and resistance zones from confirmed pivots, volume, RSI(14) and its latest signals. kestrel-chartkit computes every value when this site is built; chartlet draws them.

Synthetic 4-hour bars of a fictitious CASOON share with invented prices, no real quotes.

CASOON share (fictitious prices) · 4hSynthetic 4-hour candles of a fictitious CASOON share — invented prices, no real quotes — with EMA 20 and EMA 50, the nearest support and resistance zones from the confirmed pivots, the last price and the latest RSI signals, all computed by kestrel-chartkit. Volume and RSI(14) below.CASOON share (fictitious prices) · 4h95100105110115120Price040008000Volume20601002026-01-052026-01-122026-01-19RSICASOON (fictitious) (hollow: rising, filled: falling)EMA 20EMA 50VolumeRSI 14Support: values 105.43 to 105.98Resistance: values 115.13 to 115.69Last 111.59: 111.592026-01-05 00:00 – CASOON (fictitious): open 100.00, high 100.60, low 99.69, close 100.212026-01-05 04:00 – CASOON (fictitious): open 100.21, high 101.50, low 100.00, close 101.022026-01-05 08:00 – CASOON (fictitious): open 101.02, high 101.82, low 100.42, close 101.272026-01-05 12:00 – CASOON (fictitious): open 101.27, high 101.82, low 100.33, close 100.772026-01-05 16:00 – CASOON (fictitious): open 100.77, high 101.95, low 100.49, close 101.492026-01-05 20:00 – CASOON (fictitious): open 101.49, high 102.37, low 101.24, close 101.912026-01-06 00:00 – CASOON (fictitious): open 101.91, high 102.71, low 101.53, close 102.362026-01-06 04:00 – CASOON (fictitious): open 102.36, high 102.89, low 102.03, close 102.722026-01-06 08:00 – CASOON (fictitious): open 102.72, high 104.34, low 102.23, close 103.762026-01-06 12:00 – CASOON (fictitious): open 103.76, high 105.00, low 103.18, close 104.592026-01-06 16:00 – CASOON (fictitious): open 104.59, high 105.05, low 103.95, close 104.542026-01-06 20:00 – CASOON (fictitious): open 104.54, high 105.38, low 104.04, close 105.102026-01-07 00:00 – CASOON (fictitious): open 105.10, high 105.67, low 104.24, close 104.642026-01-07 04:00 – CASOON (fictitious): open 104.64, high 104.87, low 104.16, close 104.332026-01-07 08:00 – CASOON (fictitious): open 104.33, high 104.98, low 103.79, close 104.632026-01-07 12:00 – CASOON (fictitious): open 104.63, high 105.40, low 104.33, close 104.892026-01-07 16:00 – CASOON (fictitious): open 104.89, high 105.25, low 104.34, close 104.542026-01-07 20:00 – CASOON (fictitious): open 104.54, high 105.86, low 103.95, close 105.402026-01-08 00:00 – CASOON (fictitious): open 105.40, high 105.44, low 104.64, close 104.762026-01-08 04:00 – CASOON (fictitious): open 104.76, high 105.50, low 104.71, close 104.952026-01-08 08:00 – CASOON (fictitious): open 104.95, high 105.20, low 104.21, close 104.582026-01-08 12:00 – CASOON (fictitious): open 104.58, high 105.07, low 103.69, close 104.232026-01-08 16:00 – CASOON (fictitious): open 104.23, high 104.77, low 103.75, close 104.152026-01-08 20:00 – CASOON (fictitious): open 104.15, high 104.37, low 103.59, close 103.842026-01-09 00:00 – CASOON (fictitious): open 103.84, high 104.63, low 103.83, close 104.342026-01-09 04:00 – CASOON (fictitious): open 104.34, high 105.73, low 104.17, close 105.332026-01-09 08:00 – CASOON (fictitious): open 105.33, high 105.46, low 104.09, close 104.632026-01-09 12:00 – CASOON (fictitious): open 104.63, high 105.46, low 104.50, close 104.932026-01-09 16:00 – CASOON (fictitious): open 104.93, high 105.05, low 104.73, close 104.962026-01-09 20:00 – CASOON (fictitious): open 104.96, high 105.45, low 104.00, close 104.302026-01-10 00:00 – CASOON (fictitious): open 104.30, high 104.62, low 104.14, close 104.292026-01-10 04:00 – CASOON (fictitious): open 104.29, high 105.27, low 104.10, close 104.802026-01-10 08:00 – CASOON (fictitious): open 104.80, high 105.32, low 104.25, close 105.172026-01-10 12:00 – CASOON (fictitious): open 105.17, high 106.01, low 104.97, close 105.552026-01-10 16:00 – CASOON (fictitious): open 105.55, high 105.93, low 105.18, close 105.232026-01-10 20:00 – CASOON (fictitious): open 105.23, high 106.31, low 104.89, close 105.922026-01-11 00:00 – CASOON (fictitious): open 105.92, high 106.48, low 105.58, close 106.292026-01-11 04:00 – CASOON (fictitious): open 106.29, high 106.59, low 105.03, close 105.322026-01-11 08:00 – CASOON (fictitious): open 105.32, high 106.05, low 104.86, close 105.872026-01-11 12:00 – CASOON (fictitious): open 105.87, high 105.96, low 105.16, close 105.582026-01-11 16:00 – CASOON (fictitious): open 105.58, high 106.03, low 104.85, close 104.862026-01-11 20:00 – CASOON (fictitious): open 104.86, high 105.27, low 103.94, close 104.012026-01-12 00:00 – CASOON (fictitious): open 104.01, high 104.15, low 103.30, close 103.692026-01-12 04:00 – CASOON (fictitious): open 103.69, high 103.72, low 102.51, close 103.022026-01-12 08:00 – CASOON (fictitious): open 103.02, high 103.15, low 102.10, close 102.332026-01-12 12:00 – CASOON (fictitious): open 102.33, high 102.60, low 102.02, close 102.422026-01-12 16:00 – CASOON (fictitious): open 102.42, high 102.66, low 101.82, close 102.032026-01-12 20:00 – CASOON (fictitious): open 102.03, high 102.13, low 101.47, close 102.032026-01-13 00:00 – CASOON (fictitious): open 102.03, high 102.38, low 101.66, close 101.782026-01-13 04:00 – CASOON (fictitious): open 101.78, high 102.13, low 101.44, close 101.652026-01-13 08:00 – CASOON (fictitious): open 101.65, high 102.15, low 101.47, close 101.762026-01-13 12:00 – CASOON (fictitious): open 101.76, high 102.20, low 101.63, close 101.952026-01-13 16:00 – CASOON (fictitious): open 101.95, high 102.22, low 101.21, close 101.802026-01-13 20:00 – CASOON (fictitious): open 101.80, high 102.75, low 101.59, close 102.722026-01-14 00:00 – CASOON (fictitious): open 102.72, high 102.89, low 101.64, close 102.252026-01-14 04:00 – CASOON (fictitious): open 102.25, high 103.19, low 102.07, close 102.992026-01-14 08:00 – CASOON (fictitious): open 102.99, high 103.19, low 102.88, close 103.162026-01-14 12:00 – CASOON (fictitious): open 103.16, high 105.36, low 102.63, close 104.952026-01-14 16:00 – CASOON (fictitious): open 104.95, high 106.39, low 104.88, close 105.832026-01-14 20:00 – CASOON (fictitious): open 105.83, high 106.41, low 105.59, close 106.032026-01-15 00:00 – CASOON (fictitious): open 106.03, high 106.86, low 105.95, close 106.622026-01-15 04:00 – CASOON (fictitious): open 106.62, high 107.35, low 106.22, close 107.192026-01-15 08:00 – CASOON (fictitious): open 107.19, high 108.36, low 106.96, close 107.832026-01-15 12:00 – CASOON (fictitious): open 107.83, high 108.61, low 107.70, close 108.292026-01-15 16:00 – CASOON (fictitious): open 108.29, high 108.60, low 107.62, close 108.172026-01-15 20:00 – CASOON (fictitious): open 108.17, high 109.05, low 108.13, close 108.542026-01-16 00:00 – CASOON (fictitious): open 108.54, high 109.83, low 108.05, close 109.792026-01-16 04:00 – CASOON (fictitious): open 109.79, high 110.24, low 109.57, close 110.112026-01-16 08:00 – CASOON (fictitious): open 110.11, high 110.70, low 109.45, close 109.692026-01-16 12:00 – CASOON (fictitious): open 109.69, high 110.72, low 109.62, close 110.132026-01-16 16:00 – CASOON (fictitious): open 110.13, high 111.42, low 109.67, close 110.972026-01-16 20:00 – CASOON (fictitious): open 110.97, high 112.15, low 110.64, close 111.782026-01-17 00:00 – CASOON (fictitious): open 111.78, high 113.18, low 111.75, close 112.862026-01-17 04:00 – CASOON (fictitious): open 112.86, high 113.43, low 112.31, close 113.312026-01-17 08:00 – CASOON (fictitious): open 113.31, high 114.77, low 113.02, close 114.582026-01-17 12:00 – CASOON (fictitious): open 114.58, high 115.05, low 113.99, close 114.222026-01-17 16:00 – CASOON (fictitious): open 114.22, high 114.50, low 113.81, close 114.482026-01-17 20:00 – CASOON (fictitious): open 114.48, high 115.41, low 113.89, close 114.922026-01-18 00:00 – CASOON (fictitious): open 114.92, high 115.03, low 114.23, close 114.532026-01-18 04:00 – CASOON (fictitious): open 114.53, high 115.00, low 113.80, close 114.412026-01-18 08:00 – CASOON (fictitious): open 114.41, high 114.73, low 113.07, close 113.452026-01-18 12:00 – CASOON (fictitious): open 113.45, high 114.00, low 112.77, close 113.332026-01-18 16:00 – CASOON (fictitious): open 113.33, high 113.43, low 112.72, close 112.762026-01-18 20:00 – CASOON (fictitious): open 112.76, high 112.88, low 111.63, close 112.082026-01-19 00:00 – CASOON (fictitious): open 112.08, high 112.38, low 111.78, close 111.972026-01-19 04:00 – CASOON (fictitious): open 111.97, high 112.18, low 111.74, close 112.102026-01-19 08:00 – CASOON (fictitious): open 112.10, high 112.27, low 111.09, close 111.112026-01-19 12:00 – CASOON (fictitious): open 111.11, high 111.30, low 109.79, close 110.182026-01-19 16:00 – CASOON (fictitious): open 110.18, high 110.40, low 108.91, close 108.932026-01-19 20:00 – CASOON (fictitious): open 108.93, high 109.43, low 108.30, close 108.562026-01-20 00:00 – CASOON (fictitious): open 108.56, high 108.78, low 107.52, close 107.682026-01-20 04:00 – CASOON (fictitious): open 107.68, high 108.28, low 107.29, close 107.322026-01-20 08:00 – CASOON (fictitious): open 107.32, high 107.97, low 107.18, close 107.622026-01-20 12:00 – CASOON (fictitious): open 107.62, high 108.33, low 107.41, close 107.862026-01-20 16:00 – CASOON (fictitious): open 107.86, high 107.98, low 107.04, close 107.122026-01-20 20:00 – CASOON (fictitious): open 107.12, high 107.59, low 106.38, close 106.812026-01-21 00:00 – CASOON (fictitious): open 106.81, high 106.92, low 106.18, close 106.492026-01-21 04:00 – CASOON (fictitious): open 106.49, high 106.75, low 106.15, close 106.182026-01-21 08:00 – CASOON (fictitious): open 106.18, high 107.86, low 105.70, close 107.432026-01-21 12:00 – CASOON (fictitious): open 107.43, high 107.55, low 107.33, close 107.482026-01-21 16:00 – CASOON (fictitious): open 107.48, high 108.71, low 107.05, close 108.342026-01-21 20:00 – CASOON (fictitious): open 108.34, high 109.15, low 108.07, close 108.642026-01-22 00:00 – CASOON (fictitious): open 108.64, high 109.09, low 107.20, close 107.762026-01-22 04:00 – CASOON (fictitious): open 107.76, high 109.21, low 107.74, close 108.952026-01-22 08:00 – CASOON (fictitious): open 108.95, high 109.13, low 108.54, close 108.842026-01-22 12:00 – CASOON (fictitious): open 108.84, high 110.45, low 108.30, close 109.862026-01-22 16:00 – CASOON (fictitious): open 109.86, high 110.14, low 108.78, close 109.302026-01-22 20:00 – CASOON (fictitious): open 109.30, high 109.95, low 108.98, close 109.572026-01-23 00:00 – CASOON (fictitious): open 109.57, high 111.29, low 109.47, close 110.832026-01-23 04:00 – CASOON (fictitious): open 110.83, high 111.67, low 110.25, close 111.592026-01-08 04:00 – EMA 20: 103.622026-01-08 08:00 – EMA 20: 103.712026-01-08 12:00 – EMA 20: 103.762026-01-08 16:00 – EMA 20: 103.802026-01-08 20:00 – EMA 20: 103.802026-01-09 00:00 – EMA 20: 103.852026-01-09 04:00 – EMA 20: 103.992026-01-09 08:00 – EMA 20: 104.052026-01-09 12:00 – EMA 20: 104.142026-01-09 16:00 – EMA 20: 104.222026-01-09 20:00 – EMA 20: 104.222026-01-10 00:00 – EMA 20: 104.232026-01-10 04:00 – EMA 20: 104.292026-01-10 08:00 – EMA 20: 104.372026-01-10 12:00 – EMA 20: 104.482026-01-10 16:00 – EMA 20: 104.552026-01-10 20:00 – EMA 20: 104.682026-01-11 00:00 – EMA 20: 104.842026-01-11 04:00 – EMA 20: 104.882026-01-11 08:00 – EMA 20: 104.982026-01-11 12:00 – EMA 20: 105.032026-01-11 16:00 – EMA 20: 105.022026-01-11 20:00 – EMA 20: 104.922026-01-12 00:00 – EMA 20: 104.802026-01-12 04:00 – EMA 20: 104.632026-01-12 08:00 – EMA 20: 104.422026-01-12 12:00 – EMA 20: 104.222026-01-12 16:00 – EMA 20: 104.022026-01-12 20:00 – EMA 20: 103.832026-01-13 00:00 – EMA 20: 103.632026-01-13 04:00 – EMA 20: 103.442026-01-13 08:00 – EMA 20: 103.282026-01-13 12:00 – EMA 20: 103.162026-01-13 16:00 – EMA 20: 103.032026-01-13 20:00 – EMA 20: 103.002026-01-14 00:00 – EMA 20: 102.932026-01-14 04:00 – EMA 20: 102.932026-01-14 08:00 – EMA 20: 102.952026-01-14 12:00 – EMA 20: 103.152026-01-14 16:00 – EMA 20: 103.402026-01-14 20:00 – EMA 20: 103.652026-01-15 00:00 – EMA 20: 103.932026-01-15 04:00 – EMA 20: 104.242026-01-15 08:00 – EMA 20: 104.582026-01-15 12:00 – EMA 20: 104.942026-01-15 16:00 – EMA 20: 105.252026-01-15 20:00 – EMA 20: 105.562026-01-16 00:00 – EMA 20: 105.962026-01-16 04:00 – EMA 20: 106.362026-01-16 08:00 – EMA 20: 106.672026-01-16 12:00 – EMA 20: 107.002026-01-16 16:00 – EMA 20: 107.382026-01-16 20:00 – EMA 20: 107.802026-01-17 00:00 – EMA 20: 108.282026-01-17 04:00 – EMA 20: 108.762026-01-17 08:00 – EMA 20: 109.322026-01-17 12:00 – EMA 20: 109.782026-01-17 16:00 – EMA 20: 110.232026-01-17 20:00 – EMA 20: 110.682026-01-18 00:00 – EMA 20: 111.042026-01-18 04:00 – EMA 20: 111.362026-01-18 08:00 – EMA 20: 111.562026-01-18 12:00 – EMA 20: 111.732026-01-18 16:00 – EMA 20: 111.832026-01-18 20:00 – EMA 20: 111.852026-01-19 00:00 – EMA 20: 111.862026-01-19 04:00 – EMA 20: 111.892026-01-19 08:00 – EMA 20: 111.812026-01-19 12:00 – EMA 20: 111.662026-01-19 16:00 – EMA 20: 111.402026-01-19 20:00 – EMA 20: 111.132026-01-20 00:00 – EMA 20: 110.802026-01-20 04:00 – EMA 20: 110.472026-01-20 08:00 – EMA 20: 110.202026-01-20 12:00 – EMA 20: 109.972026-01-20 16:00 – EMA 20: 109.702026-01-20 20:00 – EMA 20: 109.432026-01-21 00:00 – EMA 20: 109.152026-01-21 04:00 – EMA 20: 108.862026-01-21 08:00 – EMA 20: 108.732026-01-21 12:00 – EMA 20: 108.612026-01-21 16:00 – EMA 20: 108.582026-01-21 20:00 – EMA 20: 108.592026-01-22 00:00 – EMA 20: 108.512026-01-22 04:00 – EMA 20: 108.552026-01-22 08:00 – EMA 20: 108.582026-01-22 12:00 – EMA 20: 108.702026-01-22 16:00 – EMA 20: 108.762026-01-22 20:00 – EMA 20: 108.832026-01-23 00:00 – EMA 20: 109.032026-01-23 04:00 – EMA 20: 109.272026-01-13 04:00 – EMA 50: 103.412026-01-13 08:00 – EMA 50: 103.342026-01-13 12:00 – EMA 50: 103.292026-01-13 16:00 – EMA 50: 103.232026-01-13 20:00 – EMA 50: 103.212026-01-14 00:00 – EMA 50: 103.172026-01-14 04:00 – EMA 50: 103.162026-01-14 08:00 – EMA 50: 103.162026-01-14 12:00 – EMA 50: 103.232026-01-14 16:00 – EMA 50: 103.342026-01-14 20:00 – EMA 50: 103.442026-01-15 00:00 – EMA 50: 103.572026-01-15 04:00 – EMA 50: 103.712026-01-15 08:00 – EMA 50: 103.872026-01-15 12:00 – EMA 50: 104.042026-01-15 16:00 – EMA 50: 104.202026-01-15 20:00 – EMA 50: 104.372026-01-16 00:00 – EMA 50: 104.592026-01-16 04:00 – EMA 50: 104.802026-01-16 08:00 – EMA 50: 105.002026-01-16 12:00 – EMA 50: 105.202026-01-16 16:00 – EMA 50: 105.422026-01-16 20:00 – EMA 50: 105.672026-01-17 00:00 – EMA 50: 105.952026-01-17 04:00 – EMA 50: 106.242026-01-17 08:00 – EMA 50: 106.572026-01-17 12:00 – EMA 50: 106.872026-01-17 16:00 – EMA 50: 107.172026-01-17 20:00 – EMA 50: 107.472026-01-18 00:00 – EMA 50: 107.752026-01-18 04:00 – EMA 50: 108.012026-01-18 08:00 – EMA 50: 108.222026-01-18 12:00 – EMA 50: 108.422026-01-18 16:00 – EMA 50: 108.592026-01-18 20:00 – EMA 50: 108.732026-01-19 00:00 – EMA 50: 108.862026-01-19 04:00 – EMA 50: 108.982026-01-19 08:00 – EMA 50: 109.072026-01-19 12:00 – EMA 50: 109.112026-01-19 16:00 – EMA 50: 109.102026-01-19 20:00 – EMA 50: 109.082026-01-20 00:00 – EMA 50: 109.032026-01-20 04:00 – EMA 50: 108.962026-01-20 08:00 – EMA 50: 108.912026-01-20 12:00 – EMA 50: 108.872026-01-20 16:00 – EMA 50: 108.802026-01-20 20:00 – EMA 50: 108.722026-01-21 00:00 – EMA 50: 108.632026-01-21 04:00 – EMA 50: 108.542026-01-21 08:00 – EMA 50: 108.492026-01-21 12:00 – EMA 50: 108.452026-01-21 16:00 – EMA 50: 108.452026-01-21 20:00 – EMA 50: 108.462026-01-22 00:00 – EMA 50: 108.432026-01-22 04:00 – EMA 50: 108.452026-01-22 08:00 – EMA 50: 108.462026-01-22 12:00 – EMA 50: 108.522026-01-22 16:00 – EMA 50: 108.552026-01-22 20:00 – EMA 50: 108.592026-01-23 00:00 – EMA 50: 108.682026-01-23 04:00 – EMA 50: 108.79RSI up: 2026-01-21 08:00, 105.70RSI down: 2026-01-18 00:00, 115.03RSI down: 2026-01-16 12:00, 110.72SupportResistanceLast 111.59RSI upRSI downRSI down2026-01-05 00:00 – Volume: 27212026-01-05 04:00 – Volume: 39502026-01-05 08:00 – Volume: 37382026-01-05 12:00 – Volume: 39332026-01-05 16:00 – Volume: 38752026-01-05 20:00 – Volume: 31652026-01-06 00:00 – Volume: 32822026-01-06 04:00 – Volume: 26082026-01-06 08:00 – Volume: 52422026-01-06 12:00 – Volume: 46122026-01-06 16:00 – Volume: 30922026-01-06 20:00 – Volume: 35992026-01-07 00:00 – Volume: 37942026-01-07 04:00 – Volume: 22932026-01-07 08:00 – Volume: 33002026-01-07 12:00 – Volume: 30522026-01-07 16:00 – Volume: 27112026-01-07 20:00 – Volume: 48122026-01-08 00:00 – Volume: 24742026-01-08 04:00 – Volume: 24572026-01-08 08:00 – Volume: 28812026-01-08 12:00 – Volume: 37052026-01-08 16:00 – Volume: 29492026-01-08 20:00 – Volume: 24362026-01-09 00:00 – Volume: 24812026-01-09 04:00 – Volume: 40752026-01-09 08:00 – Volume: 36772026-01-09 12:00 – Volume: 28292026-01-09 16:00 – Volume: 14792026-01-09 20:00 – Volume: 38342026-01-10 00:00 – Volume: 18182026-01-10 04:00 – Volume: 32692026-01-10 08:00 – Volume: 30382026-01-10 12:00 – Volume: 29872026-01-10 16:00 – Volume: 23832026-01-10 20:00 – Volume: 37712026-01-11 00:00 – Volume: 26972026-01-11 04:00 – Volume: 40702026-01-11 08:00 – Volume: 32822026-01-11 12:00 – Volume: 24922026-01-11 16:00 – Volume: 32872026-01-11 20:00 – Volume: 35952026-01-12 00:00 – Volume: 25842026-01-12 04:00 – Volume: 33382026-01-12 08:00 – Volume: 30072026-01-12 12:00 – Volume: 20272026-01-12 16:00 – Volume: 25592026-01-12 20:00 – Volume: 22022026-01-13 00:00 – Volume: 23012026-01-13 04:00 – Volume: 22672026-01-13 08:00 – Volume: 22452026-01-13 12:00 – Volume: 20002026-01-13 16:00 – Volume: 29302026-01-13 20:00 – Volume: 32392026-01-14 00:00 – Volume: 34222026-01-14 04:00 – Volume: 31532026-01-14 08:00 – Volume: 14452026-01-14 12:00 – Volume: 65232026-01-14 16:00 – Volume: 39782026-01-14 20:00 – Volume: 25102026-01-15 00:00 – Volume: 26992026-01-15 04:00 – Volume: 31742026-01-15 08:00 – Volume: 37312026-01-15 12:00 – Volume: 27152026-01-15 16:00 – Volume: 28442026-01-15 20:00 – Volume: 27412026-01-16 00:00 – Volume: 45412026-01-16 04:00 – Volume: 22012026-01-16 08:00 – Volume: 34262026-01-16 12:00 – Volume: 30972026-01-16 16:00 – Volume: 44762026-01-16 20:00 – Volume: 39732026-01-17 00:00 – Volume: 38052026-01-17 04:00 – Volume: 31672026-01-17 08:00 – Volume: 44792026-01-17 12:00 – Volume: 30182026-01-17 16:00 – Volume: 22502026-01-17 20:00 – Volume: 39942026-01-18 00:00 – Volume: 24812026-01-18 04:00 – Volume: 33222026-01-18 08:00 – Volume: 42872026-01-18 12:00 – Volume: 33852026-01-18 16:00 – Volume: 22762026-01-18 20:00 – Volume: 34332026-01-19 00:00 – Volume: 20582026-01-19 04:00 – Volume: 17272026-01-19 08:00 – Volume: 32642026-01-19 12:00 – Volume: 39772026-01-19 16:00 – Volume: 39362026-01-19 20:00 – Volume: 31642026-01-20 00:00 – Volume: 34382026-01-20 04:00 – Volume: 28772026-01-20 08:00 – Volume: 24662026-01-20 12:00 – Volume: 27512026-01-20 16:00 – Volume: 27692026-01-20 20:00 – Volume: 33472026-01-21 00:00 – Volume: 23432026-01-21 04:00 – Volume: 20482026-01-21 08:00 – Volume: 53292026-01-21 12:00 – Volume: 12602026-01-21 16:00 – Volume: 42862026-01-21 20:00 – Volume: 30672026-01-22 00:00 – Volume: 47662026-01-22 04:00 – Volume: 38922026-01-22 08:00 – Volume: 20452026-01-22 12:00 – Volume: 53072026-01-22 16:00 – Volume: 36512026-01-22 20:00 – Volume: 28252026-01-23 00:00 – Volume: 46352026-01-23 04:00 – Volume: 378270: 7030: 302026-01-07 08:00 – RSI 14: 812026-01-07 12:00 – RSI 14: 822026-01-07 16:00 – RSI 14: 802026-01-07 20:00 – RSI 14: 802026-01-08 00:00 – RSI 14: 772026-01-08 04:00 – RSI 14: 752026-01-08 08:00 – RSI 14: 732026-01-08 12:00 – RSI 14: 692026-01-08 16:00 – RSI 14: 672026-01-08 20:00 – RSI 14: 652026-01-09 00:00 – RSI 14: 652026-01-09 04:00 – RSI 14: 682026-01-09 08:00 – RSI 14: 652026-01-09 12:00 – RSI 14: 652026-01-09 16:00 – RSI 14: 652026-01-09 20:00 – RSI 14: 622026-01-10 00:00 – RSI 14: 602026-01-10 04:00 – RSI 14: 612026-01-10 08:00 – RSI 14: 632026-01-10 12:00 – RSI 14: 642026-01-10 16:00 – RSI 14: 642026-01-10 20:00 – RSI 14: 652026-01-11 00:00 – RSI 14: 672026-01-11 04:00 – RSI 14: 632026-01-11 08:00 – RSI 14: 632026-01-11 12:00 – RSI 14: 612026-01-11 16:00 – RSI 14: 572026-01-11 20:00 – RSI 14: 522026-01-12 00:00 – RSI 14: 482026-01-12 04:00 – RSI 14: 442026-01-12 08:00 – RSI 14: 412026-01-12 12:00 – RSI 14: 392026-01-12 16:00 – RSI 14: 372026-01-12 20:00 – RSI 14: 362026-01-13 00:00 – RSI 14: 352026-01-13 04:00 – RSI 14: 342026-01-13 08:00 – RSI 14: 342026-01-13 12:00 – RSI 14: 362026-01-13 16:00 – RSI 14: 362026-01-13 20:00 – RSI 14: 412026-01-14 00:00 – RSI 14: 422026-01-14 04:00 – RSI 14: 462026-01-14 08:00 – RSI 14: 482026-01-14 12:00 – RSI 14: 562026-01-14 16:00 – RSI 14: 622026-01-14 20:00 – RSI 14: 652026-01-15 00:00 – RSI 14: 682026-01-15 04:00 – RSI 14: 712026-01-15 08:00 – RSI 14: 732026-01-15 12:00 – RSI 14: 752026-01-15 16:00 – RSI 14: 762026-01-15 20:00 – RSI 14: 762026-01-16 00:00 – RSI 14: 792026-01-16 04:00 – RSI 14: 802026-01-16 08:00 – RSI 14: 792026-01-16 12:00 – RSI 14: 782026-01-16 16:00 – RSI 14: 802026-01-16 20:00 – RSI 14: 812026-01-17 00:00 – RSI 14: 832026-01-17 04:00 – RSI 14: 842026-01-17 08:00 – RSI 14: 862026-01-17 12:00 – RSI 14: 852026-01-17 16:00 – RSI 14: 852026-01-17 20:00 – RSI 14: 852026-01-18 00:00 – RSI 14: 832026-01-18 04:00 – RSI 14: 822026-01-18 08:00 – RSI 14: 762026-01-18 12:00 – RSI 14: 722026-01-18 16:00 – RSI 14: 682026-01-18 20:00 – RSI 14: 632026-01-19 00:00 – RSI 14: 602026-01-19 04:00 – RSI 14: 592026-01-19 08:00 – RSI 14: 552026-01-19 12:00 – RSI 14: 492026-01-19 16:00 – RSI 14: 432026-01-19 20:00 – RSI 14: 402026-01-20 00:00 – RSI 14: 362026-01-20 04:00 – RSI 14: 332026-01-20 08:00 – RSI 14: 332026-01-20 12:00 – RSI 14: 342026-01-20 16:00 – RSI 14: 332026-01-20 20:00 – RSI 14: 322026-01-21 00:00 – RSI 14: 312026-01-21 04:00 – RSI 14: 292026-01-21 08:00 – RSI 14: 352026-01-21 12:00 – RSI 14: 372026-01-21 16:00 – RSI 14: 422026-01-21 20:00 – RSI 14: 452026-01-22 00:00 – RSI 14: 442026-01-22 04:00 – RSI 14: 482026-01-22 08:00 – RSI 14: 492026-01-22 12:00 – RSI 14: 532026-01-22 16:00 – RSI 14: 532026-01-22 20:00 – RSI 14: 542026-01-23 00:00 – RSI 14: 572026-01-23 04:00 – RSI 14: 617030
CASOON share (fictitious prices) · 4hSynthetic 4-hour candles of a fictitious CASOON share — invented prices, no real quotes — with EMA 20 and EMA 50, the nearest support and resistance zones from the confirmed pivots, the last price and the latest RSI signals, all computed by kestrel-chartkit. Volume and RSI(14) below.CASOON share (fictitious prices)· 4h95100105110115120Price02000400060008000Volume204060801002026-01-12RSICASOON (fictitious) (hollow: rising, filled:falling)EMA 20EMA 50VolumeRSI 14Support: values 105.43 to 105.98Resistance: values 115.13 to 115.69Last 111.59: 111.59RSI up: 2026-01-21 08:00, 105.70RSI down: 2026-01-18 00:00, 115.03RSI down: 2026-01-16 12:00, 110.72SupportResistanceLast 111.59RSI upRSI downRSI down70: 7030: 307030

Work in progress

kestrel-chartkit is under active development and not yet a stable foundation. Indicator names, parameters, outputs and whole modules can still change fundamentally between versions, and there is no compatibility promise before 1.0. Pin a release tag and expect to adapt when you upgrade.
indicators, each built by name from one definition
136
contract cases: complete expected runs, bar by bar
375
golden-reference test suites
60
market regimes, from fixed and documented rules
4

What it does

Generated at build time

All examples →
Market regime per bar · CASOON (fictitious) 4hSynthetic 4-hour candles of a fictitious CASOON share in four legs: up, sideways, down, sideways. classify_regime runs on every bar with ADX(14) and ATR(14); the band below the candles shows the regime, the lowest pane the ADX with the trend threshold of 20. The first bars have no regime yet: ADX and ATR are still warming up.Market regime per bar · CASOON (fictitious) 4h8090100110120130Price01Regime0204060801002026-01-052026-01-122026-01-192026-01-26ADXCASOON (fictitious) (hollow: rising, filled: falling)Bullish expansionBearish expansionTransitionADX 14trend threshold 20: 20trend threshold 20

The market regime per bar, from classify_regime with ADX and ATR, on the fictitious CASOON share. kestrel-chartkit computes every value; chartlet draws them when this site is built.

examples/site_showcase.rs

Pure computation

The crate contains mathematics only: indicators, statistics and valuation formulas. It fetches no market data, connects to no broker or exchange, and holds no credentials, keys, account or personal data. Drawing is left to a renderer: chartletfor static charts like the ones on this site, orkestrel-loom for an interactive chart in the browser, itself still in development. A composite signal is a rule-based summary of indicator readings, not a forecast, and nothing here is investment advice.

Quickstart

Build an indicator by name and feed it bars. The quickstart in the documentation runs the full example from the terminal above.

  1. Add the dependency, pinned to a release tag.
  2. Build an indicator from the registry with build_checked.
  3. Stream validated bars through on_bar and read the output.
main.rsRust
let params = HashMap::from([("rsi_len".to_string(), 14.0)]);
let mut rsi = build_checked("rsi", &params)?;

let bar = Bar::try_new(1700000000, 100.0, 105.0, 95.0, 104.0, 1000.0)?;
if let Some(output) = rsi.on_bar(&bar) {
    println!("RSI: {:.2}", output.value);
}
Read the quickstart

New in v0.41.0

Changelog →

Frequently asked questions

Is kestrel-chartkit stable enough to build on?

Not yet. The crate is pre-1.0 and under active development, so indicator names, parameters and outputs can still change fundamentally between versions. Pin a release tag and expect to adapt when you upgrade.

Does kestrel-chartkit draw charts itself?

No. It returns plain indicator and signal data; drawing is left to a renderer such as chartlet for static charts, used throughout this site, or kestrel-loom for an interactive browser chart, still in alpha.

Is the composite signal investment advice?

No. It's a rule-based summary of indicator readings from fixed thresholds, with a direction against the regime vetoed and every signal carrying its subscores — not a forecast, and nothing here is investment advice.

Does the crate fetch market data or need API keys?

No. It contains mathematics only: it fetches no market data, connects to no broker or exchange, and holds no credentials, keys, accounts or personal data — you bring the bars.