Unique identifier for the result (used as directory name, e.g., UUID)
Array of message models from LLM conversation
Signal DTO returned by LLM (position, priceOpen, TP, SL, etc.)
OptionaloutputDir: stringOutput directory path (default: "./dump/strategy")
Promise that resolves when all files are written
import { dumpSignal, getCandles } from "backtest-kit";
import { v4 as uuid } from "uuid";
addStrategy({
strategyName: "llm-strategy",
interval: "5m",
getSignal: async (symbol) => {
const messages = [];
// Build multi-timeframe analysis conversation
const candles1h = await getCandles(symbol, "1h", 24);
messages.push(
{ role: "user", content: `Analyze 1h trend:\n${formatCandles(candles1h)}` },
{ role: "assistant", content: "Trend analyzed" }
);
const candles5m = await getCandles(symbol, "5m", 24);
messages.push(
{ role: "user", content: `Analyze 5m structure:\n${formatCandles(candles5m)}` },
{ role: "assistant", content: "Structure analyzed" }
);
// Request signal
messages.push({
role: "user",
content: "Generate trading signal. Use position: 'wait' if uncertain."
});
const resultId = uuid();
const signal = await llmRequest(messages);
// Save conversation and result for debugging
await dumpSignal(resultId, messages, signal);
return signal;
}
});
// Creates: ./dump/strategy/{uuid}/00_system_prompt.md
// ./dump/strategy/{uuid}/01_user_message.md (1h analysis)
// ./dump/strategy/{uuid}/02_assistant_message.md
// ./dump/strategy/{uuid}/03_user_message.md (5m analysis)
// ./dump/strategy/{uuid}/04_assistant_message.md
// ./dump/strategy/{uuid}/05_user_message.md (signal request)
// ./dump/strategy/{uuid}/06_llm_output.md (final signal)
Dumps signal data and LLM conversation history to markdown files. Used by AI-powered strategies to save debug logs for analysis.
Creates a directory structure with:
Skips if directory already exists to avoid overwriting previous results.