프로그램의 큰 갈래를 잡고 세부적인 내용을 조율하고 있던 도중 필요한 지표들을 직접 계산할 필요 없이 라이브러리를 활용하면 된다는 것을 찾았다. TA, TA-Lib, pandas(수동 계산), Tulip Indicators 등 라이브러리들을 찾았다. 이중 TA-Lib와 Tulip Indicators가 C언어로 계산해서 속도가 빠르다고 한다. 분 단위로 계산을 해야 하는 만큼, 속도가 빠르면 빠를수록 좋다고 생각한다. 내가 원하는 지표가 TA-Lib에는 존재하지 않아서, Tulip Indicators를 활용하기로 하였다.
* 추가적으로, api로 가져오는 봉 내용은 완성된 봉만 가져온다고 한다(12시. 11분. n초에 조회하면 12시 10분 봉부터 n개 봉 반환).
*웹소켓으로 분봉을 가져와서 시간 지연을 최소화시키고 싶었으나, 현재는 웹소켓에서 분봉을 반환하는 기능이 구현되어있지 않아 Rest API를 활용하기로 결정지음. 문의도 해봤으나 빠르게 기능이 추가될 것 같지는 않음.
구현
PFD 중 [Rest API를 통해 과거 캔들 정보 획득->보조지표 계산->조건 부합 확인] 부분부터 구현을 해보자.
이 프로그램은 1분마다 모든 코인의 일정 정보를 가져와서 보조지표를 계산해야 한다.
구조는 아래와 같이 가져가기로 하였다.
/project
├── main.py
├── coins_indicators_calculator.py
└── transaction.py
전역(main)에 dictionary 자료형을 사용하고 레퍼런스 참조(주소 참조)를 통해 동시에 접근하게 하였다. 코테 문제를 풀면서, dictionary set과 같은 자료형은 해시를 통해 특정 행동에 시간 복잡도가 O(1)이라는 것을 배웠다. 개별 거래에서 각각의 종목에 대한 정보를 바로 조회할 수 있어야 하고, 코인명-코인정보를 쌍으로 저장해야 하기에 dictionary자료형을 사용하기로 하였다.
API로 코인 목록 가져와서 -> 분봉 정보 가져오기까지 소요시간은 평균 20초인 것 같다.
API로 코인 목록 가져와서 -> 분봉 정보 가져오기 -> 지표 계산하기까지의 총시간을 계산해 보았다. 이와 더불어 C연산이기도 하고 분봉을 많이 사용하지는 않지만, 저번에 확인하였을 때 2개 스레드로 나누는 것이 Rest API부분에서는 가장 빨랐기에 이번에도 1개/2개/그 이상 스레드 속도 차이를 비교해 보았다.
단일 쓰레드 결과 - 32초
시작 : 2025-02-01 18:56:00.000031
종료 : 2025-02-01 18:56:32.641713
2개 쓰레드 결과 - 18초
시작 : 2025-02-01 19:10:00.000060
종료 : 2025-02-01 19:10:17.981445
3개 쓰레드 결과 - 18초
시작 : 2025-02-01 19:12:00.000108
종료 : 2025-02-01 19:12:18.103525
+많은 429 오류 발생
2개의 쓰레드로 작동하도록 하는 것이 맞는 것 같다.
2025.02.08 - [자동매매/Upbit] - [파이썬] 업비트 자동매매 봇 만들기 5 - asyncio, async, await, 비동기 작업
[파이썬] 업비트 자동매매 봇 만들기 5 - asyncio, async, await, 비동기 작업
이제 프로그램과 API 통신, WebSocket이 구체적으로 어떻게 몇 초 몇 분 간격으로 이루어지는지 구상하고 구현해야 한다. 기준 시간은 다음과 같이 정했고, 추가적인 시퀀스 다이어그램을 통해 구조
chabin37.tistory.com
'API Transaction > Upbit' 카테고리의 다른 글
[파이썬] 업비트 자동매매 봇 만들기 6 - 거래중인 코인 갯수 유지(무분별한 코인 거래 방지) (1) | 2025.02.10 |
---|---|
[파이썬] 업비트 자동매매 봇 만들기 5 - asyncio, async, await, 비동기 작업 (0) | 2025.02.08 |
[Python] 업비트 자동매매 봇 만들기 3 - Process Flow Diagram과 API요청 수 제한 (0) | 2025.01.30 |
[Python] 업비트 자동매매 봇 만들기 2 - JSON통신 압축 (0) | 2025.01.29 |
[Python] 업비트 자동매매 봇 만들기 1 - 업비트의 통신 방식 (0) | 2025.01.29 |