fix: 데이트레이딩 보유 종목이 화면에 안 보이던 문제 — 엔진 포지션 직접 표시
Portfolio 테이블은 stock_code가 unique라 같은 종목을 스윙+데이트레이딩으로 동시 보유하면 한 행에 합쳐지고 strategy_type도 하나만 남는다(LG씨엔에스 스윙 8 + DT 4 = 12주 'swing'). - 프론트: /daytrading/positions(엔진 인메모리)를 직접 조회해 '데이트레이딩' 그룹으로 표시하고, 스윙 행에서는 그 수량을 차감 - 백엔드 동기화: 전량이 DT 포지션일 때만 'daytrading' 태깅 (부분 혼재 시 스윙 청산 대상 유지) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -606,9 +606,13 @@ async def sync_portfolio(db: AsyncSession = Depends(get_db), force: bool = True)
|
||||
# 데이트레이딩 엔진이 보유 중인 종목 → strategy_type='daytrading' 태깅용
|
||||
try:
|
||||
from app.services.daytrading.position_manager import day_trading_state as _dts
|
||||
_dt_codes = set(_dts.positions.keys())
|
||||
_dt_qty = {
|
||||
code: int(pos.get("quantity", 0) or 0)
|
||||
for code, pos in _dts.positions.items()
|
||||
}
|
||||
_dt_codes = set(_dt_qty)
|
||||
except Exception:
|
||||
_dt_codes = set()
|
||||
_dt_qty, _dt_codes = {}, set()
|
||||
|
||||
for item in balance_data["output1"]:
|
||||
stock_code = item.get("pdno")
|
||||
@@ -746,7 +750,9 @@ async def sync_portfolio(db: AsyncSession = Depends(get_db), force: bool = True)
|
||||
h.profit_loss = profit_loss
|
||||
h.profit_loss_rate = profit_loss_rate
|
||||
h.market = exchange_code
|
||||
if stock_code in _dt_codes:
|
||||
# 같은 종목을 스윙+DT로 동시 보유하면 Portfolio 1행에 합쳐지므로,
|
||||
# 전량이 DT 포지션일 때만 태깅한다(부분 혼재 시 스윙 청산 대상 유지).
|
||||
if stock_code in _dt_codes and quantity <= _dt_qty.get(stock_code, 0):
|
||||
h.strategy_type = "daytrading"
|
||||
new_holdings.append(h)
|
||||
else:
|
||||
@@ -759,7 +765,11 @@ async def sync_portfolio(db: AsyncSession = Depends(get_db), force: bool = True)
|
||||
profit_loss=profit_loss,
|
||||
profit_loss_rate=profit_loss_rate,
|
||||
market=exchange_code,
|
||||
strategy_type="daytrading" if stock_code in _dt_codes else "swing",
|
||||
strategy_type=(
|
||||
"daytrading"
|
||||
if quantity <= _dt_qty.get(stock_code, 0)
|
||||
else "swing"
|
||||
),
|
||||
)
|
||||
db.add(new_holding)
|
||||
new_holdings.append(new_holding)
|
||||
|
||||
Reference in New Issue
Block a user