거래대금 조건 추가실제 거래해 보니 거래대금이 낮은 종목의 경우 변동성이 적어 손실만 보는 문제 발생. 이를 해결하기 위해 거래대금 조건(1억 이상) 추가판매 조건 추가[지표보다 낮아지면 판매]라는 단순한 조건으로 손절과 익절을 못하는 것 같아, 1% 손실 시 손절조건 추가. 3% 수익 시 익절조건 추가.webhook 거래와 오류 분리거래 알람용 webhook와 오류 webhook를 분리해서, 오류는 알람이 오게 함 received 1000 (OK); then sent 1000 (OK) 오류에러 메시지로 걸러지는 오류 내용인데, 내용을 읽으면...? 1000 OK..? 왜 이러는지 감이 안 와서 업비트에 문의를 넣었다....재연결 로직 구현 해야겠다..no close frame received or se..
1차적으로 개발은 완료된 것 같다. 이제 실제로 서버에 올려서 수익이 실제로 나는지, 오류가 발생하지 않는지 확인해 볼 계획이다.예외 처리다음과 같은 오류 혹은 예외사항을 처리하였다.restapi 요청 초과로 429 오류 처리일정 시간 이상 매수 성공 못하는 경우 거래 포기계좌 잔액 부족한 경우 거래 포기Lock을 획득하고 동기 작업도중 멈춰서 Lock 해제가 안되는 경우프로그램 흐름 정리 5개의 비동기 함수가 프로그램을 구성한다. 이들은 모두 비동기적으로 작동하며 본연의 역할? 을 수행한다. 각 작업들은 서로 독립적으로 작동한다. 각 함수가 수행하는 역할을 DFD에 작성해놓았다. 서버와 통신하는 Sequence Diagram이다. 원활한 거래와 요청한도를 초과하지 않기 위해, 최대한 한번에 조회하게끔 ..
거래 정보를 실시간으로 받기 위한 웹소켓을 알아보던 중, private는 realtime밖에 지원을 안 한다는 것을 알게 되었다. 이를 간략하게 정리하면 다음과 같다.Snapshot과 Realtime 데이터업비트 웹소켓으로 데이터를 전달받는 방식은 2가지가 있다.이 옵션을 설정할 수 있는 데이터 타입들과 설정할 수 없는 데이터 영역이 나뉘어있다.스냅샷(Snapshot)요청 당시의 상태를 의미하는 일회성 데이터최초 연결 시 모든 요청 코인에 대한 정보를 한 번에 수신현재가, 체결, 호가, 캔들 영역에서 스냅숏과 실시간 요청을 설정할 수 있다.실시간(Realtime)요청 정보가 스트림 형태로 지속적으로 제공시세가 변동된 코인이나 거래가 발생한 코인에 대해서만 데이터가 전송내 주문 및 체결, 내 자산의 구독형..
조건에 맞으면 거래를 실행하는 단순한 로직은, 너무나 많은 문제를 일으킨다. 간단히 생각해봐도, 다음과 같은 문제가 발생할 수 있을 것 같다.예상되는 문제점들거래 조건에 맞으면→거래 시작 에서, 만약 조건에 맞는 코인이 50개면 50개,100개면 100개 를 동시에 거래하게 된다. a. 서버 cpu 리소스가 감당할 수 있는가? b. 50개, 100개를 동시에 거래하면 손실 리스크를 잘 관리할 수 있는가? c. API와 WebSocket이 이런 대량 거래를 실시간으로 처리하는데 요청 수 제한에 걸리지 않을 수 있는가?거래중인 코인인데, 단순한 로직으로 인해 거래 대상 코인에 또 추가된다면 같은 거래가 2개 실행되는데 이를 막아야 하지 않을까?공유자원(자료구조) 추가 및 통신 Sequence 수..
이제 프로그램과 API 통신, WebSocket이 구체적으로 어떻게 몇 초 몇 분 간격으로 이루어지는지 구상하고 구현해야 한다. 기준 시간은 다음과 같이 정했고, 추가적인 시퀀스 다이어그램을 통해 구조화하였다.통신 기준분봉 기준의 거래를 구상하고 있기에, 타깃 코인 구분 절차는 1분마다 업데이트 진행{"코인명" : "현재가"} 구조인 target_dict는 1초마다 업데이트 진행1분 반복과 1초 반복은 비동기 함수를 각각 독립적으로 실행해야 한다.asyncio 활용비동기 작업과 동시 실행을 위해 아래 2가지 개념을 활용하여 비동기 작업을 구현하였다. 1. asyncio란?Python에서 비동기 프로그래밍을 지원하는 주요 요소로, 단일 스레드 환경에서 비동기 작업을 효율적으로 처리asyncio의 핵심은 이..
프로그램의 큰 갈래를 잡고 세부적인 내용을 조율하고 있던 도중 필요한 지표들을 직접 계산할 필요 없이 라이브러리를 활용하면 된다는 것을 찾았다. TA, TA-Lib, pandas(수동 계산), Tulip Indicators 등 라이브러리들을 찾았다. 이중 TA-Lib와 Tulip Indicators가 C언어로 계산해서 속도가 빠르다고 한다. 분 단위로 계산을 해야 하는 만큼, 속도가 빠르면 빠를수록 좋다고 생각한다. 내가 원하는 지표가 TA-Lib에는 존재하지 않아서, Tulip Indicators를 활용하기로 하였다.* 추가적으로, api로 가져오는 봉 내용은 완성된 봉만 가져온다고 한다(12시. 11분. n초에 조회하면 12시 10분 봉부터 n개 봉 반환).*웹소켓으로 분봉을 가져와서 시간 지연을 최..
대략적인 프로그램의 흐름을 구상했다. 나의 생각은 일단1. 모든 코인을 탐색하며 1차적인 조건을 만족하는(거래를 시작할) 코인을 검색2. 해당 코인을 팔로우하며 조건을 실시간 계산, 특정 조건 부합 시 구매 요청* 2. 를 구현할 때 멀티프로세스/멀티쓰레드/비동기(asyncio)를 고려하였고, 내가 구상한 조건에는 비동기(asyncio)를 활용한 방식이 가장 적합하다고 함.이다. 조금 더 구체화해서 기초적인 프로세스 흐름 다이어그램을 그려보았다.WebSocket으로 전부 사용하려 하였으나, [과거 n개의 분봉 조회] 기능은 Rest API를 통해서만 제공하는 것으로 확인했다.나는 모든 코인을 계속 조회하면서 조건에 맞는 코인을 찾으면 비동기적으로 거래를 시작하게끔 할 생각이기에, 모든 코인을 Rest ..
1에서는 웹소켓에 대해 기초적으로 알아보았고, 추가적으로 웹소켓으로 어떤 자료들이 넘어오는지는 간단히 확인했다. 이제 어느 자료에 웹소켓 몇 개를 할당할지 결정하고, 멀티플렉싱이 이해한 대로 작동하는지 확인해봐야 한다.웹소켓 분할 - 4종류, 5개현재가 https://docs.upbit.com/reference/websocket-ticker캔들 https://docs.upbit.com/reference/websocket-candle내 주문 및 체결 https://docs.upbit.com/reference/websocket-myorder내 자산 https://docs.upbit.com/reference/websocket-myasset구상중인 전략에서 필요한 응답은 이 4개이다. 특별하게 많이 사용하는 ..