openpondai/agents/signal-bot
OpenTool app
typescript
import type { IndicatorType } from "../config";
import type { TradeSignal } from "./types";
export function resolveTradeSignal(
indicator: IndicatorType,
output: Record<string, unknown>,
): TradeSignal {
const key = indicator === "ma-cross" ? "maCross" : indicator;
const record = output[key as keyof typeof output];
if (!record || typeof record !== "object") return "unknown";
const signal =
typeof (record as { signal?: unknown }).signal === "string"
? ((record as { signal: string }).signal ?? "")
: "";
switch (indicator) {
case "rsi":
if (signal === "oversold") return "buy";
if (signal === "overbought") return "sell";
return signal ? "hold" : "unknown";
case "macd":
if (signal === "bullish") return "buy";
if (signal === "bearish") return "sell";
return signal ? "hold" : "unknown";
case "bb":
if (signal === "oversold") return "buy";
if (signal === "overbought") return "sell";
return signal ? "hold" : "unknown";
case "sma":
case "ema":
if (signal === "above" || signal === "crossed-up") return "buy";
if (signal === "below" || signal === "crossed-down") return "sell";
return signal ? "hold" : "unknown";
case "ma-cross":
if (signal === "bullish" || signal === "bullish-cross") return "buy";
if (signal === "bearish" || signal === "bearish-cross") return "sell";
return signal ? "hold" : "unknown";
case "donchian":
if (signal === "bullish") return "buy";
if (signal === "bearish") return "sell";
return signal ? "hold" : "unknown";
}
}