feat: add Volume Profile and TPO Profile to the market profile family (#145)

Volume Profile exposes the full per-bin volume histogram (price bounds plus raw distribution) that Value Area reduces to POC/VAH/VAL. TPO Profile is the volume-agnostic Time-Price-Opportunity letter count over a rolling window. Both candle-input, Vec-output, Market Profile family, with custom Python/Node/WASM bindings, fuzz, benches, tests and docs. Indicator count 290 -> 292.
This commit is contained in:
kingchenc
2026-06-02 21:16:30 +02:00
committed by GitHub
parent 93097db482
commit f37eedd44e
17 changed files with 1263 additions and 21 deletions
+10 -3
View File
@@ -39,9 +39,10 @@ use wickra::{
Level, LinearRegression, MacdIndicator, MacdOutput, Mama, MamaOutput, MaxDrawdown, Microprice,
Obv, OrderBook, OrderBookImbalanceFull, OrderBookImbalanceTop1, ParkinsonVolatility, Ppo, Psar,
RollingVwap, Rsi, SharpeRatio, Side, SignedVolume, Sma, Stc, SuperTrend, SuperTrendOutput,
TdSequential, TdSequentialOutput, Trade, TradeImbalance, TradeQuote, TtmSqueeze,
TtmSqueezeOutput, ValueArea, ValueAreaOutput, ValueAtRisk, Vwap, VwapStdDevBands,
VwapStdDevBandsOutput, WaveTrend, YangZhangVolatility, T3,
TdSequential, TdSequentialOutput, TpoProfile, TpoProfileOutput, Trade, TradeImbalance,
TradeQuote, TtmSqueeze, TtmSqueezeOutput, ValueArea, ValueAreaOutput, ValueAtRisk,
VolumeProfile, VolumeProfileOutput, Vwap, VwapStdDevBands, VwapStdDevBandsOutput, WaveTrend,
YangZhangVolatility, T3,
};
use wickra_data::csv::CandleReader;
@@ -348,6 +349,12 @@ fn benches(c: &mut Criterion) {
bench_candle_input::<_, _, ValueAreaOutput>(c, "value_area", &candles, || {
ValueArea::new(20, 50, 0.70).unwrap()
});
bench_candle_input::<_, _, VolumeProfileOutput>(c, "volume_profile", &candles, || {
VolumeProfile::new(20, 50).unwrap()
});
bench_candle_input::<_, _, TpoProfileOutput>(c, "tpo_profile", &candles, || {
TpoProfile::new(20, 50).unwrap()
});
// === Family 16 — Risk / Performance Metrics ===
// Close-prices stand in for the equity curve / return stream; absolute