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
+28
View File
@@ -270,6 +270,16 @@ export interface ValueAreaValue {
vah: number
val: number
}
export interface VolumeProfileValue {
priceLow: number
priceHigh: number
bins: Array<number>
}
export interface TpoProfileValue {
priceLow: number
priceHigh: number
counts: Array<number>
}
export interface InitialBalanceValue {
high: number
low: number
@@ -2064,6 +2074,24 @@ export declare class ValueArea {
update(high: number, low: number, volume: number): ValueAreaValue | null
batch(high: Array<number>, low: Array<number>, volume: Array<number>): Array<number>
}
export type VolumeProfileNode = VolumeProfile
export declare class VolumeProfile {
constructor(period: number, binCount: number)
reset(): void
isReady(): boolean
warmupPeriod(): number
update(high: number, low: number, volume: number): VolumeProfileValue | null
batch(high: Array<number>, low: Array<number>, volume: Array<number>): Array<number>
}
export type TpoProfileNode = TpoProfile
export declare class TpoProfile {
constructor(period: number, binCount: number)
reset(): void
isReady(): boolean
warmupPeriod(): number
update(high: number, low: number): TpoProfileValue | null
batch(high: Array<number>, low: Array<number>): Array<number>
}
export type InitialBalanceNode = InitialBalance
export declare class InitialBalance {
constructor(period: number)