'use client'; import { useMemo } from 'react'; import { Box, Flex, Text } from '@chakra-ui/react'; import { Chart, useChart } from '@chakra-ui/charts'; import { CartesianGrid, Line, LineChart, ReferenceLine, ResponsiveContainer, Tooltip, YAxis, } from 'recharts'; import { getFormatted } from '@tradejs/core/backtest'; import type { RuntimeStrategyRevisionChange, SimpleOrderLogData, TestStat, } from '@tradejs/types'; import { formatTimeSeriesTooltipTimestamp } from '#app/lib/timeSeriesChart'; import { TimeSeriesXAxis } from '#shared/Charts/TimeSeriesXAxis'; import { buildEquityTradeOutcomePoints, TradeOutcomeMarkers, } from '#shared/Charts/TradeOutcomeMarkers'; interface RuntimeStrategyChartProps { orderLog: SimpleOrderLogData; revisionChanges?: RuntimeStrategyRevisionChange[]; stat: TestStat; startTimestamp: number; endTimestamp: number; height?: string | number; } export const RuntimeStrategyChart = ({ orderLog, revisionChanges = [], stat, startTimestamp, endTimestamp, height = '350px', }: RuntimeStrategyChartProps) => { const chartData = useMemo( () => ({ data: orderLog.map(([timestamp, amount]) => ({ timestamp, equity: amount, })), series: [ { name: 'equity', color: 'teal.solid', }, ], }), [orderLog], ); const tradeOutcomePoints = useMemo( () => buildEquityTradeOutcomePoints(orderLog), [orderLog], ); const chart = useChart(chartData as any); const { formatted: maxAmount } = getFormatted(stat, 'maxAmount'); const { formatted: minAmount } = getFormatted(stat, 'minAmount'); return ( {orderLog.length ? ( {revisionChanges.map((change) => ( ))} } /> {chart.series.map((item) => ( ))} ) : ( No runtime trades for the selected window. )} ); };