GitHub - dotredbee/URTrader: 마틴 게일 배팅법을 기반으로 제작 된 자동 매매 프로그램.
마틴 게일 배팅법을 기반으로 제작 된 자동 매매 프로그램. Contribute to dotredbee/URTrader development by creating an account on GitHub.
github.com
1.0 URTrader 개발
2020년 코로나 시국때 만들어진 프로그램이며 그 당시 주식시장에 많은 주식, 코인 자동매매 프로그램들이 시중에 많이 나왔습니다.
시중에 나온 프로그램들을 살펴보니 대부분 C언어, 파이썬으로 개발되어있었으며 대중적으로는 마틴게일 방식을 기반으로 만들어진것이 확인되어 초기 버전에 파이썬으로 마틴게일 배팅법을 구현하였습니다. 하지만 기존에 웹프로그래밍하던 저는 파이썬의 UI가 맘에 들지 않아 개선할 방법을 모색했습니다.
웹에 친속해있던 제게 리액트나 css 문법을 그대로 사용할수 있는 Electron이 가장 맞을거라 예상했고, 배우는 시간도 오래 걸리지 않을거라 생각해 Electron을 사용하여 구현했습니다.
2.0 구현
2.1 Upbit API 연동
업비트 계정으로 비트코인을 매매하기때문에 필수적으로 구현되어야 하는 기능, 업비트 자체적으로 Ajax를 이용한 구현 모델이 있는것으로 확인되나 코드가 미흡하여 추가와, 리팩토링을 걷쳐 조금더 견고하게 제작했습니다.
2.2 매매(자동, 수동)
자동뿐만아니라 수동 매매도 지원하고 있으며 매매시 가격을 실시간으로 확인이 가능하도록 제작했습니다.
2.3 API Key 매니저
업비트 API Key는 발급 시 1년이 지나면 폐기되기때문에 프로그램 내부에서 자체적으로 사용하는 키를 교체하면 편리하다 생각하여 별로로 제작해 편의성 개선에 집중했습니다.
3.0 구현시 문제와 해결방안
3.1 리액트 랜더링 문제
리액트는 컴포넌트 단위로 UI를 나눠 개발할수 있으며, 기본적으로 부모 컴포넌트에 변동이 생기면 아래 자식 컴포넌트까지 랜더링됩니다. 뿐만 아니라 내부상태(state)나 전달받은 데이터(prop)에 변동이 생기면 랜더링됩니다.
코인 가격을 실시간으로 전달받아 랜더링할 경우 자식 컴포넌트까지 랜더링되어 시간이 지남에따라 랙이 심해지는 현상을 발견했습니다.
3.1.1 해결방안
리액트에는 React.memo() 함수로 메모이징 기능을 제공하고 있으며, 이 함수를 사용한 컴포넌트는 랜더링시 기존의 DOM과 비교하여 차이가 있을때만 업데이트를 해줍니다.
3.2 빠른 API Call으로 인한 메모리 누수 문제
API Call 주기가 빠른탓에 불필요한 정보(동일 값)을 연속적으로 콜하는 현상을 발경했습니다. 이 문제는 프로그램의 랙을 유발하기에 하기에 실시간으로 자동 매매하는 프로그램으로써는 최악의 문제로 판단해 수정했습니다.
3.2.1 해결방안
캐시를 도입해 API Call로 불러온 코인 정보를 일시적으로 저장해 API Call 빈도수를 개선했습니다. 하지만 이같은 해결방안은 임시방편일뿐이며 업비트 홈페이지에 나오는 코인가격보다 아주 조금씩 느린 부분을 발견했습니다.
주변 테스터분들의 조언 상 크게 문제 없다는 의견으로 추가적인 개선은 하지 않았습니다.
3.3 키 관리자 데이터 저장 방식 결정 문제
API Key 주기로인해 키 관리자 기능이 무조건 있어야 배포시에 추가적인 배포없이도 개인이 키 관리를 할 수 있다고 생각했습니다 .
3.3.1 해결방안
로컬 데이터베이스인 SQLite3를 도입해 키 정보를 저장하는 방식을 채택했습니다.
4.0 결과
마틴게일 배팅법 구조자체가 돈이 무한정 주어진다는 가정하에 돈을 잃을수 없는 구조입니다. 현실적으로는 개인이 부는 정해져있기때문에 불가능한 구조이기에 작은 돈으로 해당 프로그램으로 매매하는 것은 큰 손실을 볼수 있습니다.