Skip to content

idle-danie/crypto-trading-profit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

프로젝트 개요

프로젝트 목표

실시간으로 다양한 암호화폐 거래소(Binance, Bithumb, Upbit, Kucoin)에서 진행되는 거래 및 OHLCV 데이터를 통해 거래소 간 발생하는 매매차익을 기반으로 지표 생성 및 대시보드를 통해 시장 현황을 추적

거래소 명 API 명세서
Binance
Kucoin
Upbit
Bithumb

기술 스택

Role Stack
Language
Streaming

프로젝트 아키텍처

image

프로젝트 디렉토리 구조

📦producer
 ┣ 📂src
 ┃ ┣ 📂api               # 각 암호화폐 거래소 API와 관련된 코드
 ┃ ┃ ┣ 📜binance.rs      # Binance API 호출 및 데이터 처리 로직
 ┃ ┃ ┣ 📜bithumb.rs      # Bithumb API 호출 및 데이터 처리 로직
 ┃ ┃ ┣ 📜kucoin.rs       # KuCoin API 호출 및 데이터 처리 로직
 ┃ ┃ ┣ 📜upbit.rs        # Upbit API 호출 및 데이터 처리 로직
 ┃ ┃ ┗ 📜mod.rs
 ┃ ┣ 📂kafka             # Kafka와의 통신을 위한 코드
 ┃ ┃ ┣ 📜producer.rs     # Kafka producer 생성 및 메시지 전송 로직
 ┃ ┃ ┗ 📜mod.rs
 ┃ ┣ 📂models            # 애플리케이션의 데이터 구조를 정의하는 코드
 ┃ ┃ ┣ 📜crypto_symbols.rs # 암호화폐 심볼 관련 구조체 정의
 ┃ ┃ ┣ 📜market_data.rs  # 암호화폐 가격을 포함한 OHLCV 데이터 관련 구조체 정의
 ┃ ┃ ┗ 📜mod.rs          
 ┃ ┣ 📂services          # 비즈니스 로직을 처리하는 서비스 계층
 ┃ ┃ ┣ 📜service.rs      # 데이터 수집 및 Kafka 전송 서비스를 위한 로직       
 ┃ ┃ ┗ 📜mod.rs 
 ┃ ┣ 📜main.rs           # 프로그램의 진입점, 주요 로직 실행
 ┃ ┗ 📜utils.rs          # 유틸리티 함수 (파싱, 심볼 정규화 등)를 포함한 헬퍼 함수들
📦consumer
 ┣ 📂config
 ┃ ┗ 📜config.py             # 설정 파일. Kafka, MySQL 등의 설정값을 관리
 ┣ 📂src
 ┃ ┣ 📂processing
 ┃ ┃ ┣ 📜data_processing.py  # 매매차익 관련 계산과 같은 핵심 데이터 처리 로직을 담은 모듈
 ┃ ┃ ┗ 📜fees.py             # 각 암호화폐 거래소의 거래 수수료 관련 정보를 담은 모듈
 ┃ ┣ 📂storage
 ┃ ┃ ┗ 📜mysql_sink.py       # MySQL에 데이터를 저장하는 로직을 담은 모듈
 ┃ ┣ 📂streaming
 ┃ ┃ ┣ 📜kafka_schema.py     # Kafka 메시지의 스키마 정의 모듈
 ┃ ┃ ┗ 📜streaming_job.py    # Kafka 스트림을 처리하는 메인 로직을 담은 모듈
 ┃ ┗ 📜main.py               # Consumer 서비스의 메인 엔트리 포인트
 ┗ 📜utils.py                # 공통 유틸리티 함수 모음

프로젝트 결과

Structured Streaming (feat. Kafka, Spark)

streaming_console.mov

MySQL

crypto_prices arbitrage_average arbitrage_values
crypto_prices arbitrage_average arbitrage_values

Grafana

BTC 실시간 매매차익 분석 ETH 실시간 매매차익 분석
BTC ETH
암호화폐 시장 현황 분석 Slack 알람 시스템
overall grafana_slack_alarm

프로젝트 실행

요구사항

이 프로젝트를 실행하려면 다음이 필요합니다:

  • Rust (build producer)
  • Python 3.x (execute consumer)
  • Java (over ver.8), JDBC connector (spark-mysql connection)
  • MySQL, Grafana 설치 및 호스팅 환경
  • Docker Desktop, Docker Compose 설치 (만약 Docker를 사용하지 않고 이미 구축되어 있는 Kafka와 Spark 실행 환경을 사용할 경우, docker-compose.yml을 참고하여 버젼 관리에 유의하여 진행)

프로젝트 세팅

1. 프로젝트 클론 및 종속성 설치

git clone https://github.com/idle-danie/crypto-trading-profit.git
cd crypto-trading-profit

2. env.sample을 참고하여 환경변수 설정

3. Docker Compose를 사용한 서비스 실행

Rust를 설치한 후, producer 애플리케이션을 실행합니다:

docker-compose up -d

4. Kafka producer 실행

Rust를 설치한 후, producer 애플리케이션을 실행합니다:

cd producer
cargo run

5. (Optional) Python 가상환경 설치 및 실행

python3 -m venv venv
source venv/bin/activate

6. Python 실행 환경 세팅 및 종속성 설치

export PYTHONPATH=$PYTHONPATH:/Users/xxx/crypto-trading-profit/consumer
cd consumer
pip install -r requirements.txt

7. Spark consumer 실행

spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.5.2 \
  --conf spark.driver.bindAddress=127.0.0.1 \
  --conf spark.driver.host=127.0.0.1 \
  --jars /path/to/mysql-connector-j-9.0.0.jar \
  src/main.py

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published