Add B7 Trailing Stops family (6 indicators) (#193)
Adds the **Trailing Stops** family deepening (B7), six new indicators (434 -> 440):
- **KaseDevStop** — Cynthia Kase's volatility stop on the standard deviation of the two-bar true range.
- **ElderSafeZone** — Alexander Elder's stop offset by a multiple of average market noise.
- **AtrRatchet** — Kaufman ATR ratchet that tightens its multiple by a per-bar increment.
- **Nrtr** — Nick Rypock Trailing Reverse (percentage band).
- **TimeBasedStop** — exits after a fixed number of bars (scalar fraction of elapsed life).
- **ModifiedMaStop** — moving-average based trailing stop.
("Wilder Volatility System" is intentionally skipped — it overlaps the existing VoltyStop/Psar/SarExt.)
Each takes Candle input; the five band/structure stops emit a {value, direction} struct, TimeBasedStop a scalar. Wired across core, Python/Node/WASM bindings, fuzz target and tests. Verified locally: 3560 core lib + 398 doc tests, clippy clean, 515 node tests, 852 pytest, counter 440.
This commit is contained in:
Vendored
+94
@@ -149,6 +149,26 @@ export interface DonchianStopValue {
|
||||
stopLong: number
|
||||
stopShort: number
|
||||
}
|
||||
export interface KaseDevStopValue {
|
||||
value: number
|
||||
direction: number
|
||||
}
|
||||
export interface ElderSafeZoneValue {
|
||||
value: number
|
||||
direction: number
|
||||
}
|
||||
export interface AtrRatchetValue {
|
||||
value: number
|
||||
direction: number
|
||||
}
|
||||
export interface NrtrValue {
|
||||
value: number
|
||||
direction: number
|
||||
}
|
||||
export interface ModifiedMaStopValue {
|
||||
value: number
|
||||
direction: number
|
||||
}
|
||||
/** Vortex Indicator pair: `VI+` and `VI-`. */
|
||||
export interface VortexValue {
|
||||
plus: number
|
||||
@@ -1668,6 +1688,15 @@ export declare class ProjectionOscillator {
|
||||
isReady(): boolean
|
||||
warmupPeriod(): number
|
||||
}
|
||||
export type TimeBasedStopNode = TimeBasedStop
|
||||
export declare class TimeBasedStop {
|
||||
constructor(maxBars: number)
|
||||
update(high: number, low: number, close: number): number | null
|
||||
batch(high: Array<number>, low: Array<number>, close: Array<number>): Array<number>
|
||||
reset(): void
|
||||
isReady(): boolean
|
||||
warmupPeriod(): number
|
||||
}
|
||||
export type StochNode = Stochastic
|
||||
export declare class Stochastic {
|
||||
constructor(kPeriod: number, dPeriod: number)
|
||||
@@ -2328,6 +2357,71 @@ export declare class RenkoTrailingStop {
|
||||
isReady(): boolean
|
||||
warmupPeriod(): number
|
||||
}
|
||||
export type KaseDevStopNode = KaseDevStop
|
||||
export declare class KaseDevStop {
|
||||
constructor(period: number, dev: number)
|
||||
update(high: number, low: number, close: number): KaseDevStopValue | null
|
||||
/**
|
||||
* Returns `[value0, direction0, value1, direction1, ...]`, length `2 * n`.
|
||||
* Warmup positions are `NaN`.
|
||||
*/
|
||||
batch(high: Array<number>, low: Array<number>, close: Array<number>): Array<number>
|
||||
reset(): void
|
||||
isReady(): boolean
|
||||
warmupPeriod(): number
|
||||
}
|
||||
export type ElderSafeZoneNode = ElderSafeZone
|
||||
export declare class ElderSafeZone {
|
||||
constructor(period: number, coeff: number)
|
||||
update(high: number, low: number, close: number): ElderSafeZoneValue | null
|
||||
/**
|
||||
* Returns `[value0, direction0, value1, direction1, ...]`, length `2 * n`.
|
||||
* Warmup positions are `NaN`.
|
||||
*/
|
||||
batch(high: Array<number>, low: Array<number>, close: Array<number>): Array<number>
|
||||
reset(): void
|
||||
isReady(): boolean
|
||||
warmupPeriod(): number
|
||||
}
|
||||
export type AtrRatchetNode = AtrRatchet
|
||||
export declare class AtrRatchet {
|
||||
constructor(atrPeriod: number, startMult: number, increment: number)
|
||||
update(high: number, low: number, close: number): AtrRatchetValue | null
|
||||
/**
|
||||
* Returns `[value0, direction0, value1, direction1, ...]`, length `2 * n`.
|
||||
* Warmup positions are `NaN`.
|
||||
*/
|
||||
batch(high: Array<number>, low: Array<number>, close: Array<number>): Array<number>
|
||||
reset(): void
|
||||
isReady(): boolean
|
||||
warmupPeriod(): number
|
||||
}
|
||||
export type NrtrNode = Nrtr
|
||||
export declare class Nrtr {
|
||||
constructor(pct: number)
|
||||
update(high: number, low: number, close: number): NrtrValue | null
|
||||
/**
|
||||
* Returns `[value0, direction0, value1, direction1, ...]`, length `2 * n`.
|
||||
* Warmup positions are `NaN`.
|
||||
*/
|
||||
batch(high: Array<number>, low: Array<number>, close: Array<number>): Array<number>
|
||||
reset(): void
|
||||
isReady(): boolean
|
||||
warmupPeriod(): number
|
||||
}
|
||||
export type ModifiedMaStopNode = ModifiedMaStop
|
||||
export declare class ModifiedMaStop {
|
||||
constructor(period: number)
|
||||
update(high: number, low: number, close: number): ModifiedMaStopValue | null
|
||||
/**
|
||||
* Returns `[value0, direction0, value1, direction1, ...]`, length `2 * n`.
|
||||
* Warmup positions are `NaN`.
|
||||
*/
|
||||
batch(high: Array<number>, low: Array<number>, close: Array<number>): Array<number>
|
||||
reset(): void
|
||||
isReady(): boolean
|
||||
warmupPeriod(): number
|
||||
}
|
||||
export type TypicalPriceNode = TypicalPrice
|
||||
export declare class TypicalPrice {
|
||||
constructor()
|
||||
|
||||
Reference in New Issue
Block a user