feat: derivatives open-interest, flow & liquidation indicators (part 2 of 3) (#127)

* feat(derivatives): OIPriceDivergence indicator (core)

* feat(derivatives): OIWeighted indicator (core)

* feat(derivatives): LongShortRatio indicator (core)

* feat(derivatives): TakerBuySellRatio indicator (core)

* feat(derivatives): LiquidationFeatures multi-output indicator (core)

* feat(derivatives): Python, Node and WASM bindings for OI, flow & liquidation indicators

* test(derivatives): Python and Node tests for OI, flow & liquidation indicators

* fuzz(derivatives): drive OI, flow & liquidation indicators in derivatives target

* docs(derivatives): README row + counter 237->242, CHANGELOG part 2
This commit is contained in:
kingchenc
2026-06-01 21:50:35 +02:00
committed by GitHub
parent 5eb820a9c7
commit 8e5bfd07ce
20 changed files with 2078 additions and 27 deletions
+53
View File
@@ -292,6 +292,14 @@ export interface FootprintLevelValue {
bidVol: number
askVol: number
}
/** The liquidation feature vector for one tick. */
export interface LiquidationFeaturesValue {
long: number
short: number
net: number
total: number
imbalance: number
}
export type SmaNode = SMA
export declare class SMA {
constructor(period: number)
@@ -2364,6 +2372,51 @@ export declare class OpenInterestDelta {
isReady(): boolean
warmupPeriod(): number
}
export type OIPriceDivergenceNode = OIPriceDivergence
export declare class OIPriceDivergence {
constructor(window: number)
update(openInterest: number, markPrice: number): number | null
batch(openInterest: Array<number>, markPrice: Array<number>): Array<number>
reset(): void
isReady(): boolean
warmupPeriod(): number
}
export type OIWeightedNode = OIWeighted
export declare class OIWeighted {
constructor()
update(markPrice: number, openInterest: number): number | null
batch(markPrice: Array<number>, openInterest: Array<number>): Array<number>
reset(): void
isReady(): boolean
warmupPeriod(): number
}
export type LongShortRatioNode = LongShortRatio
export declare class LongShortRatio {
constructor()
update(longSize: number, shortSize: number): number | null
batch(longSize: Array<number>, shortSize: Array<number>): Array<number>
reset(): void
isReady(): boolean
warmupPeriod(): number
}
export type TakerBuySellRatioNode = TakerBuySellRatio
export declare class TakerBuySellRatio {
constructor()
update(takerBuyVolume: number, takerSellVolume: number): number | null
batch(takerBuyVolume: Array<number>, takerSellVolume: Array<number>): Array<number>
reset(): void
isReady(): boolean
warmupPeriod(): number
}
export type LiquidationFeaturesNode = LiquidationFeatures
export declare class LiquidationFeatures {
constructor()
update(longLiquidation: number, shortLiquidation: number): LiquidationFeaturesValue | null
batch(longLiquidation: Array<number>, shortLiquidation: Array<number>): Array<number>
reset(): void
isReady(): boolean
warmupPeriod(): number
}
export type SharpeRatioNode = SharpeRatio
export declare class SharpeRatio {
constructor(period: number, riskFree: number)