openpondai/agents/signal-bot
OpenTool app
typescript
import type { Bar } from "../types";
export type DonchianResult = {
upper: number;
lower: number;
};
export function computeDonchian(
bars: Bar[],
period = 20,
): DonchianResult | null {
if (bars.length < period + 1) return null;
const lookback = bars.slice(-(period + 1), -1);
if (lookback.length < period) return null;
let upper = Number.NEGATIVE_INFINITY;
let lower = Number.POSITIVE_INFINITY;
for (const bar of lookback) {
if (bar.high > upper) upper = bar.high;
if (bar.low < lower) lower = bar.low;
}
if (!Number.isFinite(upper) || !Number.isFinite(lower)) return null;
return { upper, lower };
}