From c747f91792d48478b54269691df596cb9cc79534 Mon Sep 17 00:00:00 2001 From: Macbook Date: Thu, 11 Jun 2026 16:07:06 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B0=B1=ED=85=8C=EC=8A=A4=ED=8C=85=20?= =?UTF-8?q?=EC=A2=85=EB=AA=A9=20=EC=84=A0=ED=83=9D=EB=9E=80=EC=9D=84=20Mar?= =?UTF-8?q?ketSearchPanel=20=ED=95=9C=EA=B8=80=20=EA=B2=80=EC=83=89=20?= =?UTF-8?q?=EB=93=9C=EB=A1=AD=EB=8B=A4=EC=9A=B4=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../src/components/BacktestHistoryPage.tsx | 49 +++++++++++++++---- frontend/src/styles/backtestDashboard.css | 45 +++++++++++++++++ 2 files changed, 84 insertions(+), 10 deletions(-) diff --git a/frontend/src/components/BacktestHistoryPage.tsx b/frontend/src/components/BacktestHistoryPage.tsx index 3b0e288..8c2cb26 100644 --- a/frontend/src/components/BacktestHistoryPage.tsx +++ b/frontend/src/components/BacktestHistoryPage.tsx @@ -3,6 +3,8 @@ */ import '../styles/backtestDashboard.css'; import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import ReactDOM from 'react-dom'; +import { MarketSearchPanel } from './MarketSearchPanel'; import { loadBacktestResults, deleteBacktestResult, @@ -17,7 +19,6 @@ import { type BacktestSignal, type StrategyDto, } from '../utils/backendApi'; -import { UPBIT_MARKETS } from '../utils/upbitApi'; import { timeframeToCandleType } from '../utils/chartCandleType'; import type { Theme, Timeframe } from '../types'; import { buildEquityFromSignals } from '../utils/backtestEquity'; @@ -101,6 +102,9 @@ export function BacktestHistoryPage({ theme = 'dark' }: Props) { const [runStrategyId, setRunStrategyId] = useState(null); const [runLoading, setRunLoading] = useState(false); const [runError, setRunError] = useState(null); + const [showMarketSearch, setShowMarketSearch] = useState(false); + const [marketQuery, setMarketQuery] = useState(''); + const marketBtnRef = useRef(null); const [leftWidth, setLeftWidth] = useState(() => readMinWidth(LEFT_KEY, LEFT_DEFAULT)); const [rightWidth, setRightWidth] = useState(() => readMinWidth(RIGHT_KEY, RIGHT_DEFAULT)); @@ -372,17 +376,42 @@ export function BacktestHistoryPage({ theme = 'dark' }: Props) { {/* 빠른 실행 툴바 */}
- + {getKoreanName(runMarket)} + {runMarket.replace('KRW-', '')} + + + + + {showMarketSearch && ReactDOM.createPortal( + { + setRunMarket(market); + setShowMarketSearch(false); + setMarketQuery(''); + }} + onClose={() => { + setShowMarketSearch(false); + setMarketQuery(''); + }} + anchorRect={marketBtnRef.current?.getBoundingClientRect() ?? null} + anchorPlacement="dropdown" + />, + document.body, + )}