백테스트 전략이름, 이동평균선 그래프 오류 수정
This commit is contained in:
@@ -27,6 +27,7 @@ import {
|
||||
buildBacktestReportModel,
|
||||
buildLiveReportModel,
|
||||
} from '../../utils/backtestReportModel';
|
||||
import { enrichStrategyNameMap, strategyNamesFromList } from '../../utils/strategyNameResolver';
|
||||
import '../../styles/backtestDashboard.css';
|
||||
import '../../styles/analysisReportPage.css';
|
||||
|
||||
@@ -53,17 +54,25 @@ export function AnalysisReportPage({ theme = 'dark' }: Props) {
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [reportOpen, setReportOpen] = useState(false);
|
||||
|
||||
const refreshLive = useCallback(async () => {
|
||||
const refreshLive = useCallback(async (backtestRecords: BacktestResultRecord[] = []) => {
|
||||
const [trades, summary, stratList] = await Promise.all([
|
||||
loadPaperTrades(),
|
||||
loadPaperSummary(),
|
||||
loadStrategies(),
|
||||
]);
|
||||
setStrategies(stratList);
|
||||
const strategyNames = Object.fromEntries(stratList.map(s => [s.id, s.name]));
|
||||
const baseNames = strategyNamesFromList(stratList);
|
||||
const strategyNames = await enrichStrategyNameMap(
|
||||
baseNames,
|
||||
[
|
||||
...trades.map(t => t.strategyId),
|
||||
...backtestRecords.map(r => r.strategyId),
|
||||
],
|
||||
);
|
||||
const live = buildLiveExecutionItems(trades, summary, strategyNames);
|
||||
setLiveItems(live);
|
||||
setSelectedLive(prev => (prev && live.some(x => x.id === prev.id) ? prev : live[0] ?? null));
|
||||
return strategyNames;
|
||||
}, []);
|
||||
|
||||
const fetchAll = useCallback(async () => {
|
||||
@@ -73,10 +82,19 @@ export function AnalysisReportPage({ theme = 'dark' }: Props) {
|
||||
loadBacktestResults(),
|
||||
loadStrategies(),
|
||||
]);
|
||||
setRecords(recs);
|
||||
setStrategies(stratList);
|
||||
setSelectedBacktest(prev => (prev && recs.some(r => r.id === prev.id) ? prev : recs[0] ?? null));
|
||||
await refreshLive();
|
||||
const strategyNames = await refreshLive(recs);
|
||||
const enrichedRecords = recs.map(r => ({
|
||||
...r,
|
||||
strategyName: r.strategyName?.trim()
|
||||
|| (r.strategyId != null ? strategyNames[r.strategyId] : undefined)
|
||||
|| r.strategyName
|
||||
|| '전략 없음',
|
||||
}));
|
||||
setRecords(enrichedRecords);
|
||||
setSelectedBacktest(prev => (
|
||||
prev && enrichedRecords.some(r => r.id === prev.id) ? prev : enrichedRecords[0] ?? null
|
||||
));
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@@ -84,10 +102,10 @@ export function AnalysisReportPage({ theme = 'dark' }: Props) {
|
||||
|
||||
useEffect(() => { void fetchAll(); }, [fetchAll]);
|
||||
useEffect(() => {
|
||||
const onPaper = () => { void refreshLive(); };
|
||||
const onPaper = () => { void refreshLive(records); };
|
||||
window.addEventListener(PAPER_TRADES_CHANGED_EVENT, onPaper);
|
||||
return () => window.removeEventListener(PAPER_TRADES_CHANGED_EVENT, onPaper);
|
||||
}, [refreshLive]);
|
||||
}, [refreshLive, records]);
|
||||
|
||||
const compareBacktest = useMemo(() => {
|
||||
if (!selectedBacktest) return null;
|
||||
|
||||
Reference in New Issue
Block a user