Skip to content

BALLFiN/DataCollector

Repository files navigation

📈 주식 데이터 수집기

🎯 주요 특징

  • ✅ MongoDB BarbellAI.Stock에 저장
  • ✅ 영업일 기준 정확한 결측 데이터 체크
  • ✅ 설정 가능한 체크 기간

🚀 설치 방법

1. 필요한 패키지 설치

pip install requests pymongo pandas schedule python-dotenv

2. 환경 변수 설정

프로젝트 루트에 .env 파일 생성:

APP_KEY=실제_발급받은_API_키
APP_SECRET=실제_발급받은_API_시크릿
MONGO_URI=mongodb://localhost:27017/

3. MongoDB 실행

# MongoDB 실행 (Windows)
mongod

# MongoDB 실행 (macOS/Linux)
sudo systemctl start mongod

📊 사용 방법

🎮 1. 대화형 실행 (추천)

python simple_collector.py

메뉴 선택:

  • 1: 초기 설정 (처음 한 번만)
  • 2: 일반 데이터 수집
  • 3: 결측 데이터 확인
  • 4: 결측 데이터 복구
  • 5: 데이터 현황 보기
  • 6: 설정 보기

⚡ 2. 명령어 실행

python manual_tools.py setup      # 초기 설정
python manual_tools.py collect    # 데이터 수집
python manual_tools.py check      # 결측 확인
python manual_tools.py fix        # 결측 복구
python manual_tools.py status     # 현황 보기
python manual_tools.py settings   # 설정 보기

🤖 3. 자동 스케줄러

python run_scheduler.py

자동 실행:

  • 매일 09:15 → 일봉 수집
  • 매주 월요일 09:15 → 주봉 수집
  • 매월 1일 09:15 → 월봉 수집
  • 매일 18:00 → 결측 복구

💾 데이터 저장 위치

MongoDB 경로:

localhost:27017
├── BarbellAI (데이터베이스)
    └── Stock (컬렉션)
        ├── {stock_code: "005930", period: "D", date: "2025-01-15", ...}
        ├── {stock_code: "005930", period: "W", date: "2025-01-13", ...}
        └── {stock_code: "005930", period: "M", date: "2025-01-01", ...}

데이터 구조:

{
  "_id": ObjectId("..."),
  "stock_code": "005930",
  "date": ISODate("2025-01-15T00:00:00Z"),
  "period": "D",  // D: 일봉, W: 주봉, M: 월봉
  "open": 61000,
  "high": 62500,
  "low": 60800,
  "close": 62300,
  "volume": 15234567,
  "created_at": ISODate("2025-01-15T10:30:00Z")
}

⚙️ 설정 파일 (선택사항)

config.py 파일 생성하면 더 세부 설정 가능:

# 수집할 종목 리스트
STOCK_LIST = [
    "005930",  # 삼성전자
    "000660",  # SK하이닉스
    # ... 추가 종목
]

# 결측 체크 기간 (일 단위)
MISSING_CHECK_DAYS = {
    "D": 90,   # 일봉: 최근 90일
    "W": 365,  # 주봉: 최근 365일
    "M": 730   # 월봉: 최근 730일
}

# 초기 수집량
INITIAL_DATA_COUNT = {
    "D": 200,  # 일봉: 과거 200일
    "W": 100,  # 주봉: 과거 100주
    "M": 60    # 월봉: 과거 60개월
}

📋 완전한 사용 시나리오

🌟 시나리오 1: 처음 시작

# 1. .env 파일 생성 (API 키 설정)
# 2. MongoDB 실행
mongod

# 3. 초기 설정 (한 번만)
python simple_collector.py
# 메뉴 1번 선택 → 과거 데이터 대량 수집

# 4. 자동화 시작
python run_scheduler.py
# → 이후 자동으로 매일/매주/매월 수집

🔧 시나리오 2: 서버 장애 후 복구

# 1. 결측 확인
python manual_tools.py check

# 2. 복구 실행
python manual_tools.py fix

# 3. 결과 확인
python manual_tools.py status

📊 시나리오 3: MongoDB에서 데이터 확인

// MongoDB 쉘 접속
mongosh

// 데이터베이스 선택
use BarbellAI

// 컬렉션 확인
show collections

// 삼성전자 최근 일봉 5개 조회
db.Stock.find({stock_code: "005930", period: "D"}).sort({date: -1}).limit(5)

// 전체 데이터 개수 확인
db.Stock.countDocuments({})

🔧 문제 해결

❌ 자주 발생하는 오류

  1. "APP_KEY와 APP_SECRET을 .env 파일에 설정해주세요!"

    • .env 파일이 없거나 API 키가 잘못됨
    • 해결: .env 파일 생성하고 정확한 API 키 입력
  2. "MongoDB 연결 실패"

    • MongoDB가 실행되지 않음
    • 해결: mongod 명령으로 MongoDB 실행
  3. "토큰 획득 실패"

    • API 키가 잘못되었거나 네트워크 문제
    • 해결: 한국투자증권에서 API 키 재확인
  4. "데이터 조회 실패"

    • API 호출 한도 초과 또는 장 운영 시간 외
    • 해결: 시간을 두고 다시 시도

💡 성능 최적화

  1. 빠른 체크: config.py에서 MISSING_CHECK_DAYS 값 줄이기
  2. 전체 체크: 값 늘려서 완전한 무결성 확인
  3. API 한도 관리: time.sleep() 값 조절

📁 파일 구조

프로젝트/
├── .env                    # API 키 설정 (필수)
├── simple_collector.py     # 메인 수집기 (필수)
├── manual_tools.py         # 명령어 도구 (선택)
├── simple_scheduler.py     # 스케줄러 (선택)
├── run_scheduler.py        # 스케줄러 실행 (선택)
├── config.py              # 세부 설정 (선택)
├── requirements.txt       # 패키지 목록
├── scheduler.log          # 스케줄러 로그
└── README.md             # 사용 설명서

필수 파일: .env, simple_collector.py 선택 파일: 나머지 (없어도 기본값으로 동작)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published