--- name: candlestick kind: component lang: cpp domain: viz version: "1.0.0" purity: pure signature: "void candlestick(const char* title, const double* dates, const double* opens, const double* closes, const double* lows, const double* highs, int count, float width_percent = 0.25f, bool tooltip = true)" description: "Renderiza un grafico de velas OHLC usando ImPlot custom rendering. Verde para velas alcistas (close >= open), rojo para bajistas." tags: [implot, chart, visualization, gpu, candlestick, ohlc, finance, pendiente-usar] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "" imports: [implot, imgui] tested: false tests: [] test_file_path: "" file_path: "cpp/functions/viz/candlestick.cpp" framework: imgui params: - name: title desc: "Titulo del grafico, se muestra como header del plot" - name: dates desc: "Array de timestamps Unix o indices numericos del eje X, uno por vela" - name: opens desc: "Array de precios de apertura, uno por vela" - name: closes desc: "Array de precios de cierre, uno por vela" - name: lows desc: "Array de precios minimos (punta inferior del wick), uno por vela" - name: highs desc: "Array de precios maximos (punta superior del wick), uno por vela" - name: count desc: "Numero de velas (longitud de todos los arrays)" - name: width_percent desc: "Ancho del body de cada vela como fraccion del espacio entre puntos consecutivos (0.0-1.0, default 0.25)" - name: tooltip desc: "Si true, muestra tooltip con valores O/H/L/C al hacer hover sobre una vela" output: "Renderiza el grafico de velas OHLC en el frame ImGui actual, sin retornar valor" notes: "scaffolding/demo en primitives_gallery" --- # candlestick Grafico de velas OHLC completo usando custom rendering de ImPlot. Dibuja body (open-close) y wicks (high-low) por vela usando `ImPlot::GetPlotDrawList()` y `ImPlot::PlotToPixels()` para conversion de coordenadas. Debe llamarse dentro del render callback de `fn::run_app` (o cualquier contexto con un frame ImGui activo). El eje X se configura con `ImPlotScale_Time` para timestamps Unix. Solo tiene overload `double` porque los datos financieros requieren doble precision. ## Ejemplo ```cpp // arrays de datos financieros (timestamps Unix, precios) candlestick("BTC/USD", dates, opens, closes, lows, highs, 90); // sin tooltip, velas mas anchas candlestick("ETH/USD", dates, opens, closes, lows, highs, 30, 0.6f, false); ``` ## Notas - El ancho de cada vela se calcula como `(dates[1] - dates[0]) * width_percent * 0.5` en cada lado. Asume spacing uniforme entre velas. - Para un solo punto (`count == 1`) el spacing por defecto es 1.0. - La deteccion de hover usa un margen de 4px alrededor del area cuerpo+wick para facilitar la interaccion. - El eje X usa `ImPlotScale_Time` — si los datos son indices numericos simples (0, 1, 2...) en lugar de timestamps, pasar `ImPlotAxisFlags_NoDecorations` o cambiar `SetupAxisScale`.