분석레포트 로직 수정

This commit is contained in:
Macbook
2026-06-08 10:08:39 +09:00
parent e11e1a46fa
commit c20c806c19
22 changed files with 254 additions and 108 deletions
+5 -27
View File
@@ -8,6 +8,7 @@ import type { LiveExecutionItem } from './liveExecutionGroups';
import type { EquityPoint, TradeHistoryRow } from './backtestEquity';
import { buildEquityFromSignals } from './backtestEquity';
import { paperTradesToSignals } from './liveExecutionGroups';
import { buildAnalysisFromPaperTrades } from './paperMetrics';
import { repairUtf8Mojibake } from './textEncoding';
export type AnalysisSourceTab = 'backtest' | 'live';
@@ -72,37 +73,14 @@ export function buildContextFromLive(item: LiveExecutionItem): AnalysisReportCon
const signals = paperTradesToSignals(item.trades);
const cap = 10_000_000;
const eq = buildEquityFromSignals(signals, cap, item.symbol);
const finalEquity = cap * (1 + item.totalReturnPct);
const analysis: BacktestAnalysis = {
initialCapital: cap,
finalEquity,
totalReturnPct: item.totalReturnPct,
totalProfitLoss: finalEquity - cap,
grossProfit: 0,
grossLoss: 0,
avgReturnPct: item.tradeCount > 0 ? item.totalReturnPct / item.tradeCount : 0,
profitLossRatio: item.profitFactor,
numberOfPositions: item.tradeCount,
numberOfWinning: Math.round(item.tradeCount * item.winRatePct),
numberOfLosing: Math.max(0, item.tradeCount - Math.round(item.tradeCount * item.winRatePct)),
numberOfBreakEven: 0,
winRate: item.winRatePct,
maxDrawdownPct: item.mddPct,
maxRunupPct: 0,
sharpeRatio: item.sharpeRatio,
sortinoRatio: 0,
calmarRatio: 0,
valueAtRisk95: 0,
expectedShortfall: 0,
buyAndHoldReturnPct: 0,
vsBuyAndHold: 0,
};
const analysis = buildAnalysisFromPaperTrades(item.trades, cap);
const timeframe = item.timeframe !== 'unknown' ? item.timeframe : '—';
return {
sourceTab: 'live',
strategyName: repairUtf8Mojibake(item.strategyLabel),
symbol: item.symbol,
timeframe: '1h',
barCount: 300,
timeframe,
barCount: item.trades.length,
createdAt: item.createdAt,
analysis,
signals,