QuantPersona(퀀트 페르소나)는 정량 분석 엔진 위에 멘토/사용자 페르소나 관점을 얹어 투자 판단을 돕는 서비스입니다.
Persona-driven AI for stock intelligence 페르소나 기반 AI 투자 인텔리전스
현재 저장소는 다음 두 축으로 구성됩니다.
frontend: React + Vite 기반의 단일 페이지형 제품 UIbackend/QuantPersona.Api: .NET 9 Web API 기반 분석/시세/인증 서비스
면책: QuantPersona는 교육 및 연구 목적의 분석 도구입니다. 투자 자문, 매수/매도 권유, 수익 보장을 제공하지 않습니다.
현재 메인 앱은 frontend/src/pages/MasterBuildPage.jsx를 중심으로 동작하며, 다음 흐름을 제공합니다.
- 랜딩 페이지
- 다크/골드 톤의 브랜드 랜딩
- 국문/영문 전환
- 종목 탐색
- 실시간 상단 티커 바
- 검색 자동완성 스타일의 종목 선택
- 트렌딩 티커 카드
View Market확장 화면- 종목별 로고/아이콘 표시
- 멘토 선택
- 프리미엄 멘토 카드
- 멘토별 상세 페이지
- 멘토 평가 기준 레이더 차트
- 투자 철학, 핵심 원칙, 프레임워크, 고정 통계 카드
- 커스텀 페르소나
- 사용자 이름/성장-가치 성향 기반 맞춤 전략 생성
- 생성 즉시 분석에 반영
- 분석 대시보드
- 가격 추이 차트
- 멘토별 분석 요약
- 5개 팩터 점수
- DCF 스타일 내재가치 계산기
- 월가 컨센서스 카드
- 포트폴리오 추가 / 백테스트 / 인증서 모달
- 포트폴리오
- 수동 포트폴리오 보유 현황
- 수익률/비중 시각화
- 봇 아레나 형태의 모의 자동매매 시뮬레이션
- 국문/영문 bilingual UI
- 실시간 시세 티커 및 히스토리 차트 연동
- 멘토 카드/상세 페이지용 프리미엄 포트레이트 에셋 적용
- 종목 검색, 추천 종목, 섹터 탐색형 화면
- 분석 실행 시 진행률 기반 로딩 화면
- 포트폴리오 및 모의 봇 아레나 UI
- 종목 분석 API
- 백그라운드 분석 큐 + 진행률 조회 API
- 실시간 티커/히스토리 API
- 멘토 전략 목록 API
- JWT 기반 데모 인증 API
- 건강 상태 확인 API
현재 백엔드에는 다음 전략이 등록되어 있습니다.
buffett- Warren Buffettdalio- Ray Daliograham- Benjamin Grahamlynch- Peter Lynchmunger- Charlie Mungersimons- James Simonscustom- 사용자 가중치 기반 커스텀 페르소나
분석은 5개 공통 팩터를 기준으로 점수화됩니다.
SafetyMarginGrowthProfitabilityManagementPricingAttractiveness
분석 결과에는 다음이 포함됩니다.
- 전략별 총점
- 전략별 판정(
Buy,Hold,Sell) - 전략별 팩터 점수
- 전략별 요약 문장
- 합의 엔진 기반 컨센서스 결과
기본 분석 요청에서 전략을 지정하지 않으면 현재 기본 세트는 아래 4개입니다.
grahamlynchmungerbuffett
현재 시세 수집은 다단계 fallback 구조입니다.
Python yfinance스크립트- Yahoo Finance quote endpoint
- Alpha Vantage
- 로컬 모델 데이터 생성기
관련 구현:
backend/QuantPersona.Api/Infrastructure/MarketData/PythonYFinanceMarketDataProvider.csbackend/QuantPersona.Api/Infrastructure/MarketData/YahooFinanceMarketDataProvider.csbackend/QuantPersona.Api/Infrastructure/MarketData/AlphaVantageMarketDataProvider.csbackend/QuantPersona.Api/Infrastructure/MarketData/CompositeMarketDataProvider.cs
라이브 티커와 가격 히스토리는 LiveTickerService에서 처리합니다.
- 실시간 티커 스냅샷
1M,3M,1Y,5Y히스토리- 로고 URL 반환
- 외부 실패 시 로컬 시뮬레이션 폴백
QuantPersona의 현재 프론트 흐름은 종목 선택 화면에서 받은 시장 스냅샷을 분석 요청에 함께 전달합니다.
즉, 분석 엔진은 다음 흐름으로 동작합니다.
- 프론트가 라이브 티커/시장 데이터를 수신
- 선택한 종목의 가격/이전 종가/시가총액 등을
MarketSnapshot으로 포함 - 백엔드가 해당 스냅샷을 기반으로 분석 수행
- 결과를 5분 캐시
이 구조 때문에 현재 POST /api/analysis/run을 직접 호출할 때는 MarketSnapshot이 없으면 실패할 수 있습니다.
분석은 동기/비동기 두 방식이 모두 있습니다.
- 동기 실행:
POST /api/analysis/run - 비동기 큐잉:
POST /api/analysis/background - 상태 조회:
GET /api/analysis/background/{jobId}
진행률은 실제 분석 단계에 맞춰 반영됩니다.
- 초기화
- 전략 해석
- 캐시 확인
- 전략별 실행
- 컨센서스 생성
- 완료
관련 구현:
backend/QuantPersona.Api/Infrastructure/Jobs/HangfireAnalysisJobScheduler.csbackend/QuantPersona.Api/Infrastructure/Jobs/AnalysisBackgroundJob.csbackend/QuantPersona.Api/Infrastructure/Jobs/BackgroundAnalysisJobStore.csbackend/QuantPersona.Api/Services/StockAnalysisService.cs
백엔드는 데모 계정 기반 JWT 인증을 제공합니다.
POST /api/auth/loginPOST /api/auth/refresh
데모 계정:
- Email:
demo@quantpersona.ai - Password:
P@ssw0rd!
참고:
- 현재 메인 제품 경험은 대부분 익명으로 사용 가능하게 구성되어 있습니다.
RankingsAPI는 아직 스캐폴드 상태입니다.
- React 19
- Vite 7
- Tailwind CSS
- Recharts
- Axios
- TanStack Query
- .NET 9 Web API
- Entity Framework Core
- PostgreSQL 또는 InMemory fallback
- Redis 또는 Memory cache fallback
- Hangfire
- JWT Bearer Authentication
- Python 3 +
yfinance스크립트 기반 시세 수집
[MasterBuildPage UI]
├─ Landing / Discover / Market / Mentors / Persona / Dashboard / Portfolio
├─ live ticker polling
├─ history chart requests
└─ analysis requests with market snapshot
↓
[ASP.NET Core API]
├─ /api/market
│ ├─ live-ticker
│ └─ history
├─ /api/analysis
│ ├─ run
│ ├─ background
│ └─ background/{jobId}
├─ /api/strategies
├─ /api/auth
└─ /api/health
↓
[Services]
├─ LiveTickerService
├─ StockAnalysisService
├─ ConsensusEngine
├─ StrategyFactory
└─ AuthService
↓
[Infra]
├─ Python yfinance -> Yahoo -> AlphaVantage -> LocalModel
├─ Redis or Memory cache
├─ PostgreSQL or InMemory DB
└─ Hangfire + in-memory job store
.
├─ backend/QuantPersona.Api
│ ├─ Abstractions
│ ├─ Auth
│ ├─ Contracts
│ ├─ Controllers
│ ├─ Domain
│ ├─ Infrastructure
│ │ ├─ Caching
│ │ ├─ Data
│ │ ├─ Jobs
│ │ ├─ MarketData
│ │ ├─ Options
│ │ ├─ Security
│ │ └─ Strategies
│ ├─ Services
│ ├─ Dockerfile
│ └─ Program.cs
├─ frontend
│ ├─ src/assets
│ ├─ src/components
│ ├─ src/context
│ ├─ src/features
│ ├─ src/lib
│ ├─ src/pages
│ └─ src/data
├─ deploy
└─ scripts
Base URL 예시:
- Backend dev:
http://localhost:5078
GET /api/health
GET /api/market/live-ticker?symbols=AAPL,MSFT,NVDAGET /api/market/history?symbol=NVDA&period=1Y
GET /api/strategies
POST /api/analysis/runPOST /api/analysis/backgroundGET /api/analysis/background/{jobId}
POST /api/auth/loginPOST /api/auth/refresh
GET /api/rankings- 현재는 인증 필요 + 스캐폴드 응답만 반환
분석 요청 예시:
{
"ticker": "NVDA",
"strategyIds": ["buffett", "simons"],
"customWeights": {
"safetyMargin": 20,
"growth": 30,
"profitability": 20,
"management": 15,
"pricingAttractiveness": 15
},
"marketSnapshot": {
"price": 850.2,
"previousClose": 831.1,
"companyName": "NVIDIA Corp.",
"marketCap": 2090000000000,
"enterpriseValue": 2140000000000,
"source": "LiveTicker",
"marketTimestamp": "2026-03-19T08:00:00Z"
}
}- .NET SDK 9.x
- Node.js 20+
- Python 3
- 선택: PostgreSQL, Redis
Python은 권장 사항입니다. 없어도 Yahoo/AlphaVantage/LocalModel fallback으로 동작할 수 있습니다.
cd backend/QuantPersona.Api
dotnet restore
dotnet run기본 개발 URL:
http://localhost:5078
cd frontend
npm install
npm run dev기본 개발 URL:
http://localhost:5173
개발 환경에서는 Vite 프록시를 통해 /api 요청이 http://localhost:5078로 전달됩니다.
프론트 환경변수 예시:
cp frontend/.env.example frontend/.envfrontend/.env.example
VITE_API_BASE_URL=- 개발: 비워두고 Vite 프록시 사용
- 운영:
https://api.example.com같은 실제 API 주소 설정 - 권장 운영 기준:
https://api.quantpersona.ai
Jwt__IssuerJwt__AudienceJwt__SigningKeyJwt__AccessTokenMinutesJwt__RefreshTokenDaysConnectionStrings__PostgreSqlConnectionStrings__RedisMarketData__AlphaVantageApiKeyMarketData__PythonExecutableMarketData__YFinanceScriptPathMarketData__PythonTimeoutSecondsCors__AllowedOrigins__0
VITE_API_BASE_URL
현재 구현 기준에서 운영 전에 반드시 인지해야 할 점입니다.
- 백그라운드 분석 저장소가 영속적이지 않음
- Hangfire는 현재
MemoryStorage - 잡 상태 저장도
ConcurrentDictionary기반 in-memory - 서버 재시작 시 상태 유실 가능
- 포트폴리오/봇 아레나 상태는 프론트 로컬 상태
- DB 저장, 사용자별 영속화는 아직 없음
- 일부 시장 데이터는 fallback 모델일 수 있음
- 외부 데이터 소스 실패 시
LocalModel또는 시뮬레이션 데이터 사용
Rankings는 아직 스캐폴드
- 실제 소셜 랭킹/백테스트 리더보드는 미구현
dotnet build QuantPersona.sln
npm run lint --prefix frontend
npm run build --prefix frontend- 베타 오픈 런북:
deploy/BETA_OPEN_60MIN_KR.md - 백엔드 Docker 이미지:
backend/QuantPersona.Api/Dockerfile - 스모크 테스트 스크립트:
scripts/smoke-beta.sh