
이전에 시리즈로 작성했던 알고리즘 트레이딩이 있었다. 나름 rust를 공부하면서 만들었던 첫 번째 프로젝트엿다. 자동 매매에 관심이 있었기에 시도하려 했지만 결국 자동 매매 봇을 만들지는 못했다.
rust에도 익숙해 졌고, 서버 아키텍처를 설계하고 운영할 수 있는 시력도 충분히 쌓인 것 같다..
저번에 실패했던 이유는 어떻게 서버를 구성하고 실제로 가동하는지에 대한 개념이 부족했던 것 같다. 자연스럽게 시간이 흐르고 경험을 하다보니 어떻게 하면 좋을지 아이디어가 떠올랐던 것 같다.
HFT 를 만드는 것은 아니다. 그러나 기회가 되면 공부해보고 만들어보고 싶다. 원하는 알고리즘(price action)을 로직으로 정리하여 실시간 캔들에 따라 매수 매도를 하는 자동화 봇을 구현할 예정이다.
HFT (High-frequency trading): 고성능 알고리즘을 이용해 아주 짧은 시간(밀리초 단위) 내에 수많은 주문을 내는 초단타 매매 기법.
빠른 개발과 효율적인 리소스 관리를 위해, 하나의 프로세스 내에서 핵심 기능을 멀티태스킹으로 처리하도록 설계했다. Tokio 런타임 위에서 각 기능은 독립적인 Task로 구동된다.
API 서버(Axum)
Rust 기반의 웹 프레임워크인 axum을 선택했다. 봇의 상태를 모니터링하고, 외부에서 수동으로 명령을 내리거나 설정값을 변경할 수 있도록 구현 예정이다. 또한 웹 대시보드를 만들어서 백테스트를 할 수 있도록 하고 싶다.
실시간 데이터 피드(Binance Websocket)
바이낸스 웹소켓으로 실시간 캔들 데이터를 수신한다.
현재는 단일
Symbol중심이지만, 향후 멀티 Symbol을 동시에 구독할 수 있는 구조로 확장할 계획이다.
백그라운드 워커 (Strategy Engine)
수신된 데이터를 바탕으로 정의한 알고리즘을 계산한다. 여러 알고리즘이 병렬로 처리될 수 있도록 구현한다. WebSocket을 통해 얻어온 캔들 데이터를 여러 알고리즘 Task에서 사용해야한다. Tokio의 mpsc는 Single Consumer이기 때문에 여러개의 sender를 만들어줘야 한다는 점이 몹시 귀찮았다. broadcast라는 모듈을 활용하면 문제를 해결할 수 있다.
Database
현재는 1분봉으로만 처리를 하지만, 나중에 여러 시간 프레임은 무조건 필요하다. timescaleDB 시계열 데이터베이스를 선택했다. 사용하여 지속적 집계(Continuous Aggregates)가 가능하
timescaleDB: PostgreSQL 기반의 시계열 데이터베이스이다. 지속적 집계(Continuous Aggregates)가 가능하여 1분봉 데이터를 저장하는 것만으로 5분봉, 15분봉, 1시간봉, 4시간봉, 일봉, 주봉 등 원하는 타임프레임 저장이 자동으로 가능하다.
한마디로 1분봉만 넣으면 5분봉, 15분봉은 DB가 알아서 요리해줌
홈서버
클라우드를 사용하려고 했다. 최우선으로 일단 완성을 시키고 싶어서 DB, Server, CI/CD, Front 등을 한곳에서 처리하고 싶었다. free tier에서는 안될 것 같다. 그래서 집에 남는 데스크톱을 활용해 windows를 밀고 linux를 설치하여 활용할 예정이다.
실시간으로 WebSocket에서 받은 OHCL 데이터를 broadcast 하여 백그라운드 알고리즘 워커에게 밀어넣고 있다. 간단한 것 부터 구현을 해볼 예정이다.