Function dumpSignal

  • 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:

    • 00_system_prompt.md - System messages and output summary
    • XX_user_message.md - Each user message in separate file (numbered)
    • XX_llm_output.md - Final LLM output with signal data

    Skips if directory already exists to avoid overwriting previous results.

    Parameters

    • signalId: string | number

      Unique identifier for the result (used as directory name, e.g., UUID)

    • history: MessageModel[]

      Array of message models from LLM conversation

    • signal: ISignalDto

      Signal DTO returned by LLM (position, priceOpen, TP, SL, etc.)

    • OptionaloutputDir: string

      Output directory path (default: "./dump/strategy")

    Returns Promise<void>

    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)