fix: market_data에 unrealized_pnl_pct/holding_days 추가하여 SELL 시나리오 정상화 (#259)
Some checks failed
CI / test (pull_request) Has been cancelled
Some checks failed
CI / test (pull_request) Has been cancelled
trading_cycle()의 market_data에 보유 포지션 정보가 없어 Condition requires 'unrealized_pnl_pct' but key missing from market_data 경고 발생. 보유 종목(NVDA 등)의 take-profit/stop-loss 시나리오가 평가 불가하여 HOLD(confidence=0) 고착. - get_open_position()에 timestamp 컬럼 추가 - market_data 구성 시 open_position 조회 후 아래 키 추가: - unrealized_pnl_pct: (current_price - entry_price) / entry_price * 100 - holding_days: 매수일로부터 경과 일수 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
16
src/main.py
16
src/main.py
@@ -576,6 +576,22 @@ async def trading_cycle(
|
||||
market_data["rsi"] = candidate.rsi
|
||||
market_data["volume_ratio"] = candidate.volume_ratio
|
||||
|
||||
# Enrich market_data with holding info for SELL/HOLD scenario conditions
|
||||
open_pos = get_open_position(db_conn, stock_code, market.code)
|
||||
if open_pos and current_price > 0:
|
||||
entry_price = safe_float(open_pos.get("price"), 0.0)
|
||||
if entry_price > 0:
|
||||
market_data["unrealized_pnl_pct"] = (
|
||||
(current_price - entry_price) / entry_price * 100
|
||||
)
|
||||
entry_ts = open_pos.get("timestamp")
|
||||
if entry_ts:
|
||||
try:
|
||||
entry_date = datetime.fromisoformat(entry_ts).date()
|
||||
market_data["holding_days"] = (datetime.now(UTC).date() - entry_date).days
|
||||
except (ValueError, TypeError):
|
||||
pass
|
||||
|
||||
# 1.3. Record L7 real-time context (market-scoped keys)
|
||||
timeframe = datetime.now(UTC).isoformat()
|
||||
context_store.set_context(
|
||||
|
||||
Reference in New Issue
Block a user