fix(journal): 장중 일지 자동 생성 + 전략명 unknown + profit_factor 단위 오류

- 장중 10분 주기 journal_intraday_scheduler 신설 (SELECT 전용, 쓰기는 db_worker 큐)
  - 매도 후 3분 유예(JOURNAL_INTRADAY_GRACE_MIN), trade_id in-flight TTL 30분
  - order_id 로 해소된 trade_id 에 일지가 있으면 INSERT skip (중복 방지)
- 16:00 배치 enqueue_trade_journal 이 strategy_type 을 넘기지 않아 전 일지가 'unknown' 이던 결함 수정
- analyze_performance profit_factor 를 손익률(%) 합이 아닌 금액 기준으로 (1.22 → 0.62)
- 일지 대상 SELL 상태에 PARTIAL 포함 (성과 집계 필터는 불변)
- journals 단건 생성: 중복 행 시 500 대신 409, JOURNAL_SELL_STATUSES 사용
- 16:00 배치 조회일수 config 화, 손익 0 기간 PF 오경고 제거

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 17:00:05 +09:00
parent b4e958b477
commit e4346d30fb
7 changed files with 419 additions and 21 deletions

View File

@@ -57,6 +57,7 @@ logger = logging.getLogger(__name__)
from app.services.schedulers import (
batch_analysis_scheduler,
post_market_analyzer_scheduler,
journal_intraday_scheduler,
krx_data_collector_scheduler,
news_collect_scheduler,
pre_market_us_scheduler,
@@ -280,6 +281,7 @@ async def lifespan(app: FastAPI):
app.state.batch_analysis_task = asyncio.create_task(batch_analysis_scheduler())
app.state.krx_collector_task = asyncio.create_task(krx_data_collector_scheduler())
app.state.post_market_task = asyncio.create_task(post_market_analyzer_scheduler())
app.state.journal_intraday_task = asyncio.create_task(journal_intraday_scheduler())
# ── 미국장 자동매매 스케줄러 (US_TRADING_ENABLED=True 시 활성화) ──────────
if getattr(settings, 'US_TRADING_ENABLED', False):
@@ -424,6 +426,7 @@ async def lifespan(app: FastAPI):
"day_trade_task",
"krx_collector_task",
"post_market_task",
"journal_intraday_task",
"db_worker_task",
"kis_stream_task",
"us_trade_task",