Skip to content

workimholiday/QuantPersona

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

QuantPersona

QuantPersona(퀀트 페르소나)는 정량 분석 엔진 위에 멘토/사용자 페르소나 관점을 얹어 투자 판단을 돕는 서비스입니다.

Persona-driven AI for stock intelligence 페르소나 기반 AI 투자 인텔리전스

현재 저장소는 다음 두 축으로 구성됩니다.

  • frontend: React + Vite 기반의 단일 페이지형 제품 UI
  • backend/QuantPersona.Api: .NET 9 Web API 기반 분석/시세/인증 서비스

면책: QuantPersona는 교육 및 연구 목적의 분석 도구입니다. 투자 자문, 매수/매도 권유, 수익 보장을 제공하지 않습니다.

1. 현재 서비스가 제공하는 경험

현재 메인 앱은 frontend/src/pages/MasterBuildPage.jsx를 중심으로 동작하며, 다음 흐름을 제공합니다.

  1. 랜딩 페이지
  • 다크/골드 톤의 브랜드 랜딩
  • 국문/영문 전환
  1. 종목 탐색
  • 실시간 상단 티커 바
  • 검색 자동완성 스타일의 종목 선택
  • 트렌딩 티커 카드
  • View Market 확장 화면
  • 종목별 로고/아이콘 표시
  1. 멘토 선택
  • 프리미엄 멘토 카드
  • 멘토별 상세 페이지
  • 멘토 평가 기준 레이더 차트
  • 투자 철학, 핵심 원칙, 프레임워크, 고정 통계 카드
  1. 커스텀 페르소나
  • 사용자 이름/성장-가치 성향 기반 맞춤 전략 생성
  • 생성 즉시 분석에 반영
  1. 분석 대시보드
  • 가격 추이 차트
  • 멘토별 분석 요약
  • 5개 팩터 점수
  • DCF 스타일 내재가치 계산기
  • 월가 컨센서스 카드
  • 포트폴리오 추가 / 백테스트 / 인증서 모달
  1. 포트폴리오
  • 수동 포트폴리오 보유 현황
  • 수익률/비중 시각화
  • 봇 아레나 형태의 모의 자동매매 시뮬레이션

2. 핵심 기능 요약

프론트엔드

  • 국문/영문 bilingual UI
  • 실시간 시세 티커 및 히스토리 차트 연동
  • 멘토 카드/상세 페이지용 프리미엄 포트레이트 에셋 적용
  • 종목 검색, 추천 종목, 섹터 탐색형 화면
  • 분석 실행 시 진행률 기반 로딩 화면
  • 포트폴리오 및 모의 봇 아레나 UI

백엔드

  • 종목 분석 API
  • 백그라운드 분석 큐 + 진행률 조회 API
  • 실시간 티커/히스토리 API
  • 멘토 전략 목록 API
  • JWT 기반 데모 인증 API
  • 건강 상태 확인 API

3. 전략 엔진

현재 백엔드에는 다음 전략이 등록되어 있습니다.

  • buffett - Warren Buffett
  • dalio - Ray Dalio
  • graham - Benjamin Graham
  • lynch - Peter Lynch
  • munger - Charlie Munger
  • simons - James Simons
  • custom - 사용자 가중치 기반 커스텀 페르소나

분석은 5개 공통 팩터를 기준으로 점수화됩니다.

  • SafetyMargin
  • Growth
  • Profitability
  • Management
  • PricingAttractiveness

분석 결과에는 다음이 포함됩니다.

  • 전략별 총점
  • 전략별 판정(Buy, Hold, Sell)
  • 전략별 팩터 점수
  • 전략별 요약 문장
  • 합의 엔진 기반 컨센서스 결과

기본 분석 요청에서 전략을 지정하지 않으면 현재 기본 세트는 아래 4개입니다.

  • graham
  • lynch
  • munger
  • buffett

4. 시세 데이터 파이프라인

현재 시세 수집은 다단계 fallback 구조입니다.

  1. Python yfinance 스크립트
  2. Yahoo Finance quote endpoint
  3. Alpha Vantage
  4. 로컬 모델 데이터 생성기

관련 구현:

  • backend/QuantPersona.Api/Infrastructure/MarketData/PythonYFinanceMarketDataProvider.cs
  • backend/QuantPersona.Api/Infrastructure/MarketData/YahooFinanceMarketDataProvider.cs
  • backend/QuantPersona.Api/Infrastructure/MarketData/AlphaVantageMarketDataProvider.cs
  • backend/QuantPersona.Api/Infrastructure/MarketData/CompositeMarketDataProvider.cs

라이브 티커와 가격 히스토리는 LiveTickerService에서 처리합니다.

  • 실시간 티커 스냅샷
  • 1M, 3M, 1Y, 5Y 히스토리
  • 로고 URL 반환
  • 외부 실패 시 로컬 시뮬레이션 폴백

5. 분석 실행 방식

QuantPersona의 현재 프론트 흐름은 종목 선택 화면에서 받은 시장 스냅샷을 분석 요청에 함께 전달합니다.

즉, 분석 엔진은 다음 흐름으로 동작합니다.

  1. 프론트가 라이브 티커/시장 데이터를 수신
  2. 선택한 종목의 가격/이전 종가/시가총액 등을 MarketSnapshot으로 포함
  3. 백엔드가 해당 스냅샷을 기반으로 분석 수행
  4. 결과를 5분 캐시

이 구조 때문에 현재 POST /api/analysis/run을 직접 호출할 때는 MarketSnapshot이 없으면 실패할 수 있습니다.

6. 백그라운드 분석과 진행률

분석은 동기/비동기 두 방식이 모두 있습니다.

  • 동기 실행: POST /api/analysis/run
  • 비동기 큐잉: POST /api/analysis/background
  • 상태 조회: GET /api/analysis/background/{jobId}

진행률은 실제 분석 단계에 맞춰 반영됩니다.

  • 초기화
  • 전략 해석
  • 캐시 확인
  • 전략별 실행
  • 컨센서스 생성
  • 완료

관련 구현:

  • backend/QuantPersona.Api/Infrastructure/Jobs/HangfireAnalysisJobScheduler.cs
  • backend/QuantPersona.Api/Infrastructure/Jobs/AnalysisBackgroundJob.cs
  • backend/QuantPersona.Api/Infrastructure/Jobs/BackgroundAnalysisJobStore.cs
  • backend/QuantPersona.Api/Services/StockAnalysisService.cs

7. 인증

백엔드는 데모 계정 기반 JWT 인증을 제공합니다.

  • POST /api/auth/login
  • POST /api/auth/refresh

데모 계정:

  • Email: demo@quantpersona.ai
  • Password: P@ssw0rd!

참고:

  • 현재 메인 제품 경험은 대부분 익명으로 사용 가능하게 구성되어 있습니다.
  • Rankings API는 아직 스캐폴드 상태입니다.

8. 기술 스택

Frontend

  • React 19
  • Vite 7
  • Tailwind CSS
  • Recharts
  • Axios
  • TanStack Query

Backend

  • .NET 9 Web API
  • Entity Framework Core
  • PostgreSQL 또는 InMemory fallback
  • Redis 또는 Memory cache fallback
  • Hangfire
  • JWT Bearer Authentication

보조 런타임

  • Python 3 + yfinance 스크립트 기반 시세 수집

9. 아키텍처 요약

[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

10. 주요 디렉토리

.
├─ 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

11. API 요약

Base URL 예시:

  • Backend dev: http://localhost:5078

Health

  • GET /api/health

Market

  • GET /api/market/live-ticker?symbols=AAPL,MSFT,NVDA
  • GET /api/market/history?symbol=NVDA&period=1Y

Strategies

  • GET /api/strategies

Analysis

  • POST /api/analysis/run
  • POST /api/analysis/background
  • GET /api/analysis/background/{jobId}

Auth

  • POST /api/auth/login
  • POST /api/auth/refresh

Rankings

  • 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"
  }
}

12. 로컬 실행

사전 요구사항

  • .NET SDK 9.x
  • Node.js 20+
  • Python 3
  • 선택: PostgreSQL, Redis

Python은 권장 사항입니다. 없어도 Yahoo/AlphaVantage/LocalModel fallback으로 동작할 수 있습니다.

Backend

cd backend/QuantPersona.Api
dotnet restore
dotnet run

기본 개발 URL:

  • http://localhost:5078

Frontend

cd frontend
npm install
npm run dev

기본 개발 URL:

  • http://localhost:5173

개발 환경에서는 Vite 프록시를 통해 /api 요청이 http://localhost:5078로 전달됩니다.

프론트 환경변수 예시:

cp frontend/.env.example frontend/.env

frontend/.env.example

VITE_API_BASE_URL=
  • 개발: 비워두고 Vite 프록시 사용
  • 운영: https://api.example.com 같은 실제 API 주소 설정
  • 권장 운영 기준: https://api.quantpersona.ai

13. 주요 설정값

Backend

  • Jwt__Issuer
  • Jwt__Audience
  • Jwt__SigningKey
  • Jwt__AccessTokenMinutes
  • Jwt__RefreshTokenDays
  • ConnectionStrings__PostgreSql
  • ConnectionStrings__Redis
  • MarketData__AlphaVantageApiKey
  • MarketData__PythonExecutable
  • MarketData__YFinanceScriptPath
  • MarketData__PythonTimeoutSeconds
  • Cors__AllowedOrigins__0

Frontend

  • VITE_API_BASE_URL

14. 현재 베타 한계

현재 구현 기준에서 운영 전에 반드시 인지해야 할 점입니다.

  1. 백그라운드 분석 저장소가 영속적이지 않음
  • Hangfire는 현재 MemoryStorage
  • 잡 상태 저장도 ConcurrentDictionary 기반 in-memory
  • 서버 재시작 시 상태 유실 가능
  1. 포트폴리오/봇 아레나 상태는 프론트 로컬 상태
  • DB 저장, 사용자별 영속화는 아직 없음
  1. 일부 시장 데이터는 fallback 모델일 수 있음
  • 외부 데이터 소스 실패 시 LocalModel 또는 시뮬레이션 데이터 사용
  1. Rankings는 아직 스캐폴드
  • 실제 소셜 랭킹/백테스트 리더보드는 미구현

15. 검증 명령

dotnet build QuantPersona.sln
npm run lint --prefix frontend
npm run build --prefix frontend

16. 관련 문서

  • 베타 오픈 런북: deploy/BETA_OPEN_60MIN_KR.md
  • 백엔드 Docker 이미지: backend/QuantPersona.Api/Dockerfile
  • 스모크 테스트 스크립트: scripts/smoke-beta.sh

About

Persona-driven AI for stock intelligence

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors