- 업비트에서 자동 매매할 수 있도록 Python 코드를 작성하였습니다.
- 스케줄 및 매매전략은 각자의 입맛에 맞게 수정하여 적용하시면 됩니다.
- AI(ChatGPT, Cluade 등)에게 미리 작성한 코드(trading_strategy.py)와 생각하고 있던 매매전략을 던져주시면 입맛에 맞게 코드를 수정해주니 활용하시면 됩니다. 그래도 직접 코드 검증 및 백테스팅은 해봐야 합니다.
- 보다 쉽게 사용할 수 있는
pyupbit
라는 라이브러리가 있으나 업비트에서 직접 제공하는 API를 통해 구현하였습니다.
- 볼린저밴드 매매전략을 추가해서 안정화 중입니다.
- 이번 전략으로는 야금야금 수익을 내고 있습니다. 😊
- 인기 있는 매매전략에 대해서 파악해 보고 하나둘씩 코드를 추가할 예정입니다.
- 아래 매매전략 내용은 제가 처음에 작성하면서 정리한 내용이니 단순 참고만 하시면 됩니다.
제가 차트를 보면서 임의로 설정한 것이라 매매전략은 크게 특별한 건 아닙니다.
차트로 다 맞출 수 없습니다. '대개 이렇다'는 것이지 뭐가 됐든 절대적인 건 없다고 생각해야 합니다.
매매전략을 직접 해보시면 생각보다 쉽지 않다는 것을 알게 되는데요. 원하는 매매전략을 세워서 실행하시면 됩니다.
- 동시다발적으로 여러 코인을 매매하는 것이 아니라 특정 코인만을 직접 정하여 매매
- 원화 마켓(e.g. KRW-DOGE)에서 매매. 마켓은 파라미터를 통해 얼마든지 변경 가능.
- 매매 시 분할로 하지 않으며, 시장가로 처리
- 캔들 정보는 5번(건당 200개) 연속 호출하여 가져온 1,000개의 데이터로 매매 전략을 판단
RSI
,MACD
,볼린저밴드
등을 지표로 활용- 20MA, 200MA로 시장 상황 판단 (20MA는 기울기 포함. 20MA가 200MA보다 더 크면
Bull Market
으로 설정)
- 조건에 맞는지 확인하고 매수를 진행합니다.
- 업비트는 원화(KRW) 마켓 거래 수수료가
0.05%
이기 때문에 주문금액을 현재 원화 잔고(balance)에서 어림잡아0.1%
차감하여 주문합니다.
- 불마켓인 경우, 시작(open) 값이 20MA 보다 작고, 종료(close) 값이 20MA를 돌파
- 불마켓이 아닌 경우, RSI가 30 미만이 된 이후에 MACD 히스토그램이 양전환
- 거래량이 20일 이동평균 초과
- 시작(open) 값이 볼린저밴드 중간 아래이고, 종료(close) 값이 볼린저밴드 상단을 돌파
- 매분마다 매도 타이밍을 체크합니다.
- 손절매(0.69% 손실)인 경우 매도합니다.
- 불마켓인 경우, 한 번이라도 볼린저밴드 상단을 돌파한 이후에 중심선 아래로 하락 시 매도
- 불마켓이 아닌 경우, 이전 캔들이 볼린저밴드 상단을 돌파한 경우 매도
- APScheduler의 BackgroundScheduler 적용
- 매분 선언한
auto_trading
함수를 실행하도록 interval 설정
- PC 페이지 로그인 > 마이 페이지 > Open API 관리 > 정보 입력 후 키 발급
Access Key
와Secret Key
확인- .env 파일에 정보 입력
- 매매 시 SMTP로 메일(Gmail)을 전송합니다.
(Gmail > Forwarding and POP/IMAP > IMAP access > Enable IMAP) - 현재 사용하고 있는 Google 계정이 아니라 다른 계정(Google)을 하나 더 생성해서 세팅하는 걸 추천합니다.
- 송/수신자 정보는 .env 파일에 작성하면 됩니다.
- 설정 파일:
logging.conf
- 경로: logs/
- 로그 파일: my_log.log
- 로그 레벨: console - DEBUG / file - INFO
- suffix: yyyy-MM-dd
로그 폴더가 반드시 있어야 실행됩니다. 로그는 매일 자정을 기준으로 새로 생성되며, 최대 60일 동안 보관합니다.
(단, 설정 파일 내용에서 로그 파일의 Path는 절대경로로 지정해야 함)
- Python Version: 3.13.1 (3.9 버전에서도 정상적으로 동작합니다.)
- Mac에서 작업하고 이 프로그램 소스를 가지고 윈도우(Python 3.13.1)에서 정상적으로 실행하고 있습니다.
# 프로그램 실행
# 단, 실행하기 전에 venv 세팅과 관련 라이브러리가 다운로드 된 상태여야 합니다.
python main.py
.
├── account
│ └── my_account.py
├── logs
│ └── my_log.log
├── trading
│ ├── trade.py
│ └── trading_strategy.py
│ └── trading_strategy2.py
│ └── bollinger_band_breakout.py
├── upbit_data
│ └── candle.py
├── utils
│ └── email_utils.py
├── .env
├── .gitignore
├── CHANGELOG.md
├── README.md
├── logging.conf
├── main.py
├── main_bb_breakout.py
└── requirements.txt
6 directories, 16 files