업비트는 Open API 로 자산 / 주문/ 입출금 처리 및 시세종목, 분/일/주 캔들 확인을 제공합니다. (https://docs.upbit.com/reference)
사전 조건으로 계좌를 개설하고, 아래와 같이 Open API Key 를 발급 받아야 합니다. 사진에는 짤려 있지만, 허용할 IP 주소를 작성하고 해당 IP 을 통해 API 호출하는 상황만 접속을 허용합니다.
⚠️ 고려사항 : 로컬에서 실행되는 web application 에서는 인증과정 이 부족하다는 이유로 API 접근이 불가능 했습니다. 단, google cloud, app applicaiton 은 성공
업비트 API 사용가능한 기본적인 준비가 완료 되었다면, 아래와 같은 순서로 개발을 진행합니다.
종목 코드 조회
Day 캔들 조회
보조 지표 생성 및 관심 종목 선정
분 캔들 조회
매수 시점 표시
UI 로 내용 확인
단계1: 종목 조회
업비트 종목코드 조회 API (https://docs.upbit.com/reference/%EB%A7%88%EC%BC%93-%EC%BD%94%EB%93%9C-%EC%A1%B0%ED%9A%8C) 사용하였으며, 아래와 같은 워크플로를 작성합니다.
이때 Code 블록은 dict 형태의 데이터를 Table 형태 (사실은 Dict) 로 전환하여 SQL 에 저장하기 좋게 형태 변환이 목적입니다.
아래 데이터에 caution_* 라는 신호들이 존재하는데, 매뉴얼 확인한 결과 여러가지 주의 종목을 의미 하는 것을 알았습니다. 추후, 해당 신호들은 필터링 조건으로 사용됩니다.
총 440 개의 종목이 조회되었고, 이는 SQL 에 저장됩니다.
MySQL DataBase 가 없다면?
google cloud 에서 대여가 가능합니다. 단, 주의 사항은 "SQL 사용 한다고 설정한 경우 해당일에 바로 금액 청구"가 됩니다. 그리고 매우 비쌉니다 ㅠㅠ
실수(?)한 이유는 아래 그림 처럼 예상 금액이 $1.19 로 표시 되어서 .... 할만한데? 라고 생각했기 때문입니다.
일단 옵션이 너무 과했습니다.
✔️ Enterprise plus --> 데이터 캐시로 최대 3배 높은 읽기 처리량 ....
✔️ 고가용성 서버 -> 서버장애 시, 분산 처리되어 장애없이 바로 이어서 대응 처리
✔ ️개발 서버 --> vCPU 4개, 32GB 메모리
현재 (02.11) 는 모든 옵션을 제거 한 제일 싼 기능을 사용 중이며, 아래와 같이 1/10 로 줄였습니다.
그럼 다음달은 5,000 원 이하? 를 이기를 희망합니다. ㅠㅠ
단계2: 200일간 Day candle 가져오기
저장된 종목을 가져오는데, 아래 조건으로 1차 필터링을 합니다.
1) market 중에 create_date 가 가장 최신인 것만 찾은후에,
2) caution_price_fluctuations, caution_trading_volume, caution_deposit_amount, caution_small_accounts, 가 1 이 아닌 market 만 골라줘.
3) 그리고 market, korean_name, english_name, create_date 을 table 로 출력해줘.
필터링 한 이후에 440 개 종목에서 161 개 종목으로 감소 함을 알 수 있습니다.
업비트 API 는 일 캔들 를 아래와 같이 지원 합니다. 주의 사항은 한번에 200 일 까지만 조회가 가능 합니다. (초당 30회 까지 허용 합니다. --> 이는 한국투자 (국내주식) 의 초당 5회 에 비해서는 해자 입니다. ~ )
아래 그림과 같이 200일 데이터가 생성 됨을 확인할 수 있습니다.
단계3: 보조 지표 생성하기
그리고 코드 노드에서는 이동평균선 (MA10, MA60, MA120) 과 볼린저 밴드를 생성 합니다.
주의 사항:
실제 차트와 생성된 값을 비교해 봤을 때, MA60, MA120 의 값이 차이가 났습니다.
아마도 200일 데이터로 60 & 120 일 데이터를 만들어 내기 때문에 안정화 기간이 너무 짧은 듯 합니다.
해당 데이터는 MySQL 에 day_candle 이라는 테이블에 저장 됩니다. 추후 한번에 long range 을 불러 와서 분석용으로 사용하기 위합니다.
추가적으로 아래 그림과 같이 loop 위에 컨디션 체크가 있는데, 이는 관심종목을 선정하기 위함입니다.
아래 코드 노드의 목적은 "오늘부터 200일 중에 MA60 과 MA120 의 골든 크로스가 발생하고, 오늘까지 데디 크로스가 없는 종목 찾기" 입니다. 이렇게 선정된 종목은 MySQL 에 클로스 발생 시점과 종목명을 저장합니다.
google cloud 의 MySQL 의 가낭 좋은 점 !!! chat 으로 쿼리문 작성이 기본 기능 입니다. ☺️
최종 결과는 161 개 종목 --> 103 관심종목 선정 입니다.
주의사항:
n8n 에서는 차트 제공이 부족하기 때문에 (QuickChart 노드가 존재하긴 함) 130 개 관심종목에 대한 신뢰성을 확인하기 너무 어렵다 입니다.
몇개 샘플링 하여 업비트 트레이딩뷰 가서 확인해본 결과 얼추..... 맞는듯도 합니다.
오늘(25.02.11) 기준으로 미대선으로 코인 시장이 전반적 상승이 있었다? 라는 단순한 추측으로 해당 신뢰성 여부는 추후 검증으로 미뤄둘 예정 입니다. ㅠㅠ
단계4: 분 캔들 불러오고, 매수 신호 확인하기
분캔들 API 는 3분봉 기준으로 최대 600분(10시간) 데이터만 가져올 수 있습니다. 10시간 데이터로 매수 시뮬레이션 하기에는 전략 설정이 부족할 듯 하여 1달까지 데이터를 증가시키는 코드가 필요합니다.
이레 향텔, 프롬프트로 코드 생성을 요청합니다.
단계5: UI 로 차트 표시하기
위에서 설명했듯이 n8n 에서는 시각화가 쉽지 않습니다. 그리고 보고 싶은 차트를 선택 취사해야 하기 때문에 app/web application 개발을 추천 합니다. (물론 GPT 가...)