'use client';
import { useMemo } from 'react';
import { Box, Text } from '@chakra-ui/react';
import { Chart, useChart } from '@chakra-ui/charts';
import {
CartesianGrid,
Line,
LineChart,
ResponsiveContainer,
Tooltip,
YAxis,
} from 'recharts';
import type { SimpleOrderLogData, StrategyChartOrder } from '@tradejs/types';
import { formatTimeSeriesTooltipTimestamp } from '#app/lib/timeSeriesChart';
import { TimeSeriesXAxis } from '#shared/Charts/TimeSeriesXAxis';
import {
buildEquityTradeOutcomePoints,
buildSnapshotTradeOutcomePoints,
TradeOutcomeMarkers,
} from '#shared/Charts/TradeOutcomeMarkers';
export const StrategySnapshotChart = ({
orderLog,
orders,
mode,
height = '350px',
emptyText = 'No chart data for the selected run.',
}: {
orderLog: SimpleOrderLogData;
orders: StrategyChartOrder[];
mode: 'replay' | 'ai';
height?: string | number;
emptyText?: string;
}) => {
const chartData = useMemo(
() => ({
data: orderLog.map(([timestamp, amount]) => ({
timestamp,
equity: amount,
})),
series: [
{
name: 'equity',
color: 'teal.solid',
},
],
}),
[orderLog],
);
const tradeOutcomePoints = useMemo(
() =>
mode === 'ai'
? buildEquityTradeOutcomePoints(orderLog)
: buildSnapshotTradeOutcomePoints(orders),
[mode, orderLog, orders],
);
const chart = useChart(chartData as any);
if (!orderLog.length) {
return (
{emptyText}
);
}
const values = orderLog.map(([, amount]) => amount);
const minValue = Math.min(...values);
const startTimestamp = orderLog[0][0];
const endTimestamp = orderLog[orderLog.length - 1][0];
return (
}
/>
{chart.series.map((item) => (
))}
);
};