diff --git a/src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs b/src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs index 2e166f2..515e085 100644 --- a/src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs +++ b/src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs @@ -2054,7 +2054,7 @@ function runDataFeed() { // settings 탭 — 사용자 입력 파라미터 (total_asset_krw, risk_budget_override 등) const settings = readSettingsTab_(); ensureAccountSnapshotConfirmModeSetting_(settings); - const totalAssetKrw_ = Number.isFinite(parseFloat(settings["total_asset_krw"])) + let totalAssetKrw_ = Number.isFinite(parseFloat(settings["total_asset_krw"])) ? parseFloat(settings["total_asset_krw"]) : null; const riskBudget_ = Number.isFinite(parseFloat(settings["risk_budget_override"])) ? Math.min(0.02, Math.max(0, parseFloat(settings["risk_budget_override"]))) @@ -2193,6 +2193,20 @@ function runDataFeed() { }; }); + // WBS-1.2: total_asset_krw 실시간 재계산 (2-pass update cycle) + let liveTotalAssetKrw = Number.isFinite(settlementCashD2_) ? settlementCashD2_ : 0; + for (const ticker of Object.keys(positionStopMap_)) { + const priceMetrics = resolveDataFeedPriceMetrics(ticker); + const qty = positionStopMap_[ticker].quantity; + if (priceMetrics.ok && Number.isFinite(priceMetrics.close) && Number.isFinite(qty)) { + liveTotalAssetKrw += priceMetrics.close * qty; + } + } + if (liveTotalAssetKrw > 0) { + totalAssetKrw_ = liveTotalAssetKrw; + Logger.log(`[WBS-1.2] total_asset_krw 실시간 재계산 완료: ${totalAssetKrw_} KRW (현금: ${settlementCashD2_})`); + } + // Total_Heat 사전 계산 — HF005(≥10% 매수 차단) + caution(7~10% 수량 감액)에 사용 // positionStopMap_ 완성 후 즉시 계산. ATR 추정 폴백: entry_price × 8% (보수적) let globalHeatPct_ = null; // null = 계산 불가, number = heat%