188 Commits

Author SHA1 Message Date
머니페니
c97f73ab0c fix: delete all duplicate portfolios in seed_data to ensure idempotency
All checks were successful
Deploy to Production / deploy (push) Successful in 2m2s
2026-05-13 22:48:01 +09:00
머니페니
fc0a24888d chore: trigger deployment
All checks were successful
Deploy to Production / deploy (push) Successful in 2m32s
2026-05-13 22:31:28 +09:00
머니페니
625ffadcab perf: bulk-fetch prices in generate_snapshots to reduce API calls
OpenAPI: date당 1회 호출 (기존 ticker×date회)
pykrx: ticker당 전체 기간 조회 1회 (기존 date×ticker회)
date별 sleep(1) 제거
2026-05-13 22:15:22 +09:00
머니페니
de5ff34db6 fix: support KRX OpenAPI ticker fields 2026-05-13 22:05:09 +09:00
머니페니
da9abd3e93 docs: CLAUDE.md에서 AI가 이미 아는 내용 제거
Architecture/Environment 섹션, 파일 목적 설명, snake_case 컨벤션,
docker-compose up 등 코드에서 유추 가능한 내용을 삭제하고
프로젝트 고유 정보만 남김
2026-05-13 22:02:49 +09:00
머니페니
49e60b7048 fix: rename migration revision id to avoid varchar(32) overflow and duplicate id
All checks were successful
Deploy to Production / deploy (push) Successful in 6m5s
2026-05-10 17:01:58 +09:00
머니페니
ba9c92f034 fix: alembic multiple heads merge
Some checks failed
Deploy to Production / deploy (push) Failing after 1m14s
2026-05-10 16:57:23 +09:00
머니페니
120a8546cb fix: 테스트 리포트 보완 계획 전체 구현
Some checks failed
Deploy to Production / deploy (push) Failing after 2m38s
2026-05-10 16:44:05 +09:00
머니페니
76e3220e77 feat: 에이전트 기능 추가 (LLM 서비스, 에이전트 API, 테스트)
All checks were successful
Deploy to Production / deploy (push) Successful in 3m10s
2026-05-06 20:56:45 +09:00
머니페니
34d09d9d34 feat: 김종봉식 KOSPI 종목발굴 전략 구현
Some checks failed
Deploy to Production / deploy (push) Failing after 6m46s
- KOSPIMarketStateDetector: KOSPI MA 기반 시장 상태 판단 (bull/neutral/bear/crash)
- VolumeScreener: 거래대금 2000억+ 스크리닝 (상한가 우선, 희소성 체크, 대형주 예외)
- SectorPortfolioManager: 섹터 기반 비중 배분
- KJBScreeningSignalGenerator: 눌림목 진입, 5MA 손절, 단계적 익절
- KISTradeExecutor: KIS API 자동 매수/매도 (기본값 모의투자)
- ScreeningSignal / AutoOrder DB 모델 추가
- screening API 엔드포인트 추가
- 스케줄러 잡 3종 추가 (08:30/5분/15:35)
- Price.trading_value 컬럼 추가
- MarketIndex 테이블 추가 (KOSPI/KOSDAQ 지수 일봉)
- IndexCollector 추가 (일일 수집 잡 등록)
- intraday_exit_check 시간 필터 추가 (09:05~15:20 KST)
- 드라이런 스크립트 추가 (scripts/screening_dryrun.py)
2026-05-05 23:03:53 +09:00
머니페니
9ab232ba12 feat: KRX Open API migration with pykrx fallback
- Add pykrx-openapi dependency
- New krx_client.py wrapper module
- ETFCollector: Open API bulk fetch + pykrx fallback
- ETFPriceCollector: Open API date-based bulk + pykrx fallback
- StockCollector: Open API base_info + daily_trade + pykrx fallback
- PriceCollector: Open API date-based bulk + pykrx fallback
- ValuationCollector: pykrx retained (Open API has no PER/PBR)
- generate_snapshots.py: Open API + pykrx fallback
- Auto-switch based on KRX_OPENAPI_KEY env var
- All 278 tests passing
2026-04-17 23:07:09 +09:00
머니페니
5009168246 feat: transaction modal - add per-unit price label + total amount field
All checks were successful
Deploy to Production / deploy (push) Successful in 3m42s
- Rename '가격' → '1주당 가격'
- Add '총 금액' field with auto-calculation
- Price ↔ Total synced via quantity
2026-04-16 22:51:13 +09:00
머니페니
ae244153d6 feat: generate portfolio snapshots from KRX market prices
All checks were successful
Deploy to Production / deploy (push) Successful in 1m47s
- New script: scripts/generate_snapshots.py
- Fetches actual ETF closing prices from KRX for each month-end
- Computes portfolio value from cumulative holdings at each date
- Generates 12 monthly snapshots (2025-04 ~ 2026-03)
- Added to CI/CD deploy pipeline
2026-04-15 23:42:12 +09:00
머니페니
c7178eb084 ci: add KRX credentials + seed data step to deploy workflow
All checks were successful
Deploy to Production / deploy (push) Successful in 4m15s
2026-04-15 22:17:35 +09:00
머니페니
072b6059d4 fix: KRX data collection + TIGER 200 ticker fix + trade history seed
Some checks are pending
Deploy to Production / deploy (push) Waiting to run
- Upgrade pykrx 1.2.3 → 1.2.6 (KRX login session support)
- Add KRX_ID/KRX_PW env vars for KRX authentication
- Enhance error handling in all pykrx-dependent collectors
  - ETFCollector: raise KRXDataError with login hint
  - ValuationCollector: raise RuntimeError with login hint
  - StockCollector/PriceCollector/ETFPriceCollector: JSONDecodeError handling
- Fix TIGER 200 ticker: 069500 → 102110 in seed data
- Rebuild seed_data.py from actual 33 trade records
- Add trade_history_raw.csv as source data
- Fix pension_allocation recommendation: KODEX 200 → TIGER 200
- Add ticker dropdown to transaction add modal (frontend)
- Update .env.example with KRX credentials
- All 276 tests passing
2026-04-15 22:16:42 +09:00
머니페니
862c1637bd fix: add resilience to ETFCollector and ValuationCollector
Some checks failed
Deploy to Production / deploy (push) Has been cancelled
- ETFCollector: retry once on JSONDecodeError/ConnectionError with 3s delay
- ValuationCollector: fallback to previous 3 business days on KeyError/empty data
- Both: graceful skip on persistent failure, never delete existing DB data
- Add test_collector_resilience.py (9 tests)
2026-03-29 22:45:20 +09:00
머니페니
3dcbcd3080 fix: resolve TypeScript type errors in benchmark and drawdown Tooltip formatter
Some checks are pending
Deploy to Production / deploy (push) Waiting to run
2026-03-29 10:04:48 +09:00
머니페니
12d235a1f1 feat: add 9 new modules - notification alerts, trading journal, position sizing, pension allocation, drawdown monitoring, benchmark dashboard, tax simulation, correlation analysis, parameter optimizer
Phase 1:
- Real-time signal alerts (Discord/Telegram webhook)
- Trading journal with entry/exit tracking
- Position sizing calculator (Fixed/Kelly/ATR)

Phase 2:
- Pension asset allocation (DC/IRP 70% risk limit)
- Drawdown monitoring with SVG gauge
- Benchmark dashboard (portfolio vs KOSPI vs deposit)

Phase 3:
- Tax benefit simulation (Korean pension tax rules)
- Correlation matrix heatmap
- Parameter optimizer with grid search + overfit detection
2026-03-29 10:03:08 +09:00
머니페니
fd03744bc9 chore: remove galaxis-agent docs from galaxis-po repo
Some checks are pending
Deploy to Production / deploy (push) Waiting to run
Move design specs, plans, and HANDOFF.md to their proper home
in the galaxis-agent repository. Clean up CLAUDE.md references.
2026-03-21 13:47:37 +09:00
머니페니
70ef97dd62 docs: apply review feedback to CI/CD plan
Some checks failed
Deploy to Production / deploy (push) Has been cancelled
2026-03-20 23:26:27 +09:00
머니페니
ab7b3b1e05 docs: add galaxis-agent CI/CD implementation plan 2026-03-20 23:25:22 +09:00
머니페니
5dd2ec862d docs: apply review feedback to CI/CD design spec 2026-03-20 23:24:16 +09:00
머니페니
ab6cdcb501 docs: add galaxis-agent CI/CD design spec 2026-03-20 23:22:07 +09:00
머니페니
fc58eca634 docs: add Phase 5 implementation plan with review fixes 2026-03-20 22:26:07 +09:00
머니페니
9b2b3921c8 docs: apply review feedback to Phase 5 deploy spec 2026-03-20 22:21:22 +09:00
머니페니
47c873a962 docs: add Phase 5 deployment automation design spec 2026-03-20 22:18:53 +09:00
머니페니
2b1e7cefbe docs: update CLAUDE.md with galaxis-agent reference and strengthened rules
Some checks are pending
Deploy to Production / deploy (push) Waiting to run
2026-03-20 19:03:35 +09:00
머니페니
149560c083 docs: add Phase 1 implementation plan for galaxis-agent
17-task plan covering: open-swe fork setup, code cleanup,
git_utils extraction from github.py, config module, Docker
sandbox/compose setup, ARM64 compatibility validation.
Two review iterations applied.
2026-03-20 14:28:14 +09:00
머니페니
43ff569aa3 docs: add galaxis-agent autonomous SWE agent design spec
Design for an autonomous development agent that forks open-swe
(LangGraph + Deep Agents) with Gitea webhook + Discord bot triggers,
Docker sandbox execution on Oracle VM A1 (ARM64), and Claude API.
Includes phased implementation roadmap from conservative (PR-only)
to autonomous (auto-merge with E2E gates).
2026-03-20 14:06:53 +09:00
머니페니
f6db08c9bd feat: improve security, performance, and add missing features
- Remove hardcoded database_url/jwt_secret defaults, require env vars
- Add DB indexes for stocks.market, market_cap, backtests.user_id
- Optimize backtest engine: preload all prices, move stock_names out of loop
- Fix backtest API auth: filter by user_id at query level (6 endpoints)
- Add manual transaction entry modal on portfolio detail page
- Replace console.error with toast.error in signals, backtest, data explorer
- Add backtest delete button with confirmation dialog
- Replace simulated sine chart with real snapshot data
- Add strategy-to-portfolio apply flow with dialog
- Add DC pension risk asset ratio >70% warning on rebalance page
- Add backtest comparison page with metrics table and overlay chart
2026-03-20 12:27:05 +09:00
머니페니
49bd0d8745 chore: add frontend/test-results to .gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 23:19:41 +09:00
머니페니
2ad2f56d31 docs: add project config docs, analysis report, and e2e signal cancel test
Add CLAUDE.md and AGENTS.md for AI-assisted development guidance,
analysis report with screenshots, and Playwright-based e2e test for
signal cancellation flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 23:18:16 +09:00
머니페니
f818bd3290 feat: add walk-forward analysis for backtests
- Add WalkForwardResult model with train/test window metrics
- Create WalkForwardEngine that reuses existing BacktestEngine
  with rolling train/test window splits
- Add POST/GET /api/backtest/{id}/walkforward endpoints
- Add Walk-forward tab to backtest detail page with parameter
  controls, cumulative return chart, and window results table
- Add Alembic migration for walkforward_results table
- Add 8 unit tests for window generation logic (100 total passed)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:33:41 +09:00
머니페니
741b7fa7dd feat: add skip/limit pagination to prices, snapshots, and transactions APIs
Add paginated responses (items/total/skip/limit) to:
- GET /api/data/stocks/{ticker}/prices (default limit=365)
- GET /api/data/etfs/{ticker}/prices (default limit=365)
- GET /api/portfolios/{id}/snapshots (default limit=100)
- GET /api/portfolios/{id}/transactions (default limit=50)

Frontend: update snapshot/transaction consumers to handle new response
shape, add "Load more" button to transaction table.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:32:34 +09:00
머니페니
98a161574e security: migrate JWT from localStorage to httpOnly cookie
Eliminates XSS token theft by storing JWT in httpOnly Secure cookie
instead of localStorage. Backend sets cookie on login and clears on
logout. Token extraction uses cookie-first with Authorization header
fallback for backward compatibility with existing tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:30:47 +09:00
머니페니
60d2221edc feat: add manual transaction entry UI with modal dialog
Add "거래 추가" button to the transactions tab with a modal dialog for
manually entering buy/sell transactions (ticker, type, quantity, price, memo).
Refreshes portfolio and transaction list after successful submission.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:22:56 +09:00
머니페니
4ea744ce62 feat: replace simulated sine wave chart with real snapshot data
Portfolio value chart now uses actual snapshot API data instead of
generated simulation. Shows empty state message when no snapshots exist.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:22:44 +09:00
머니페니
ee0de0504c feat: add portfolio edit/delete UI with confirmation dialogs
Add hover-visible edit (rename) and delete buttons to portfolio cards
on the list page, with modal dialogs for name editing and delete
confirmation. Uses existing PUT/DELETE API endpoints.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:22:37 +09:00
머니페니
815f255ff5 feat: add React ErrorBoundary with retry and reload UI
Add class-based ErrorBoundary component that catches rendering errors
and shows a user-friendly fallback with retry/reload buttons. Wrap in
root layout to protect against full-page crashes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:22:29 +09:00
머니페니
f12709ea79 fix: add toast error feedback for API failures in signals and data explorer pages
Replace silent console.error-only handling with user-visible toast notifications
using sonner, while keeping console.error for debugging.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:22:22 +09:00
머니페니
b80feb7176 perf: add DB performance indexes and fix N+1 query in backtest listing
Add 10 indexes across prices, etf_prices, financials, valuations,
holdings, transactions, signals, portfolio_snapshots, and etfs tables.
Fix N+1 query in list_backtests by eager-loading backtest results
with joinedload.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 22:20:29 +09:00
머니페니
4483f6e4ba feat: add DC pension ETF-only filter to strategy API
Add dc_only parameter to all strategy endpoints. When true, filters
results to include only tickers present in the ETF table, supporting
DC pension investment constraints where only ETFs are allowed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 20:57:47 +09:00
머니페니
62ac92eaaf feat: add minimum trade amount filter to rebalancing calculation
Add min_trade_amount parameter (default 10,000 KRW) to rebalance/calculate
endpoint. Trades below this threshold are converted to hold actions to avoid
inefficient micro-trades during rebalancing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 20:57:43 +09:00
머니페니
01f86298c4 feat: add strategy comparison UI for side-by-side multi-strategy analysis
Add a compare page at /strategy/compare that runs MultiFactor, Quality,
and ValueMomentum strategies simultaneously and displays results side-by-side
with common ticker highlighting and factor score comparison table.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 20:57:38 +09:00
머니페니
9249821a25 feat: add realized/unrealized PnL tracking and position sizing guide
- Add realized_pnl column to transactions table with alembic migration
- Calculate realized PnL on sell transactions: (sell_price - avg_price) * quantity
- Show total realized/unrealized PnL in portfolio detail summary cards
- Show per-transaction realized PnL in transaction history table
- Add position sizing API endpoint (GET /portfolios/{id}/position-size)
- Show position sizing guide in signal execution modal for buy signals
- 8 new E2E tests, all 88 tests passing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 19:04:36 +09:00
머니페니
65618cd957 feat: add signal execution cancel with transaction rollback and holding restore 2026-03-18 18:56:29 +09:00
머니페니
213f03a8e5 fix: replace deprecated datetime.utcnow() and SQLAlchemy Query.get() 2026-03-18 18:53:29 +09:00
eb06dfc48b feat: implement scenario gap analysis - core loop completion
All checks were successful
Deploy to Production / deploy (push) Successful in 1m32s
Phase 1 (Critical):
- Add bulk rebalance apply API + UI with confirmation modal
- Add strategy results to portfolio targets flow (shared component)

Phase 2 (Important):
- Show current holdings in signal execute modal with auto-fill
- Add DC pension risk asset ratio warning (70% limit)
- Add KOSPI benchmark comparison to portfolio returns
- Track signal execution details (price, quantity, timestamp)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 18:18:15 +09:00
ea93e09059 chore: add .worktrees/ to .gitignore 2026-02-19 16:51:15 +09:00
c97bb8595e docs: add scenario gap analysis results and implementation plan
Expert team identified 12 gaps across 6 scenarios. Prioritized into
3 phases: Critical (rebalance apply, strategy-to-portfolio link),
Important (signal holdings, DC limits, benchmark, signal PnL),
and Nice-to-have (comparison UI, walk-forward, undo).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 16:44:40 +09:00