SpringBoot를 활용해서 암호화폐통합관리시스템을 간단하게 구현했었습니다. 하지만 SpringBoot로 하기에는 프로그램 자체도 가볍고 개인적으로만 활용할 것이라, 이를 Flask로 구현했습니다.
기존의 SpringBoot에서 만들었던 것은 단순하게 현재 포지션을 조회 후 잔고나 거래내역 등을 보여주었고, 이번 Flask는 TradingView의 FineScript 언어를 활용, 전략을 구현해 Alert 웹훅을 이용한 자동매매를 실행합니다.
본격적인 설명에 앞서 Flask와 SpringBoot의 차이점을 매우 간단하게 알아보고 가려합니다. 만약 이를 원치 않는다면 해당 문단은 넘어가도 좋습니다.
Flask는 Werkzeug, Jinja2 및 좋은 의도를 기반으로 한 Python용 마이크로프레임워크 입니다. Flask의 뛰어난 장점은 매우 빠르게 시작할 수 있으며, 이를 중점으로 만들어졌다는 것입니다.
반면 SpringBoot는 최소한의 번거로움으로 Spring 기반의 프로덕션급 애플리케이션 및 서비스를 생성하는 것에 의도되어 있다고 합니다. 이는 곧 Flask는 Microframeworks(Backend) 범주의 도구로 분류될 수 있는 반면, SpringBoot는 Framework(Full Stack)으로 그룹화 될 수 있음을 말합니다. 만약 경량, Python, 최소를 의도한다면 Flask는 최고의 선택이 될 것이며, 강력, 쉬운 설정, Java를 의도한다면 SpringBoot가 최고의 선택이 될 것입니다.
해당 사이드프로젝트를 진행하면서 가장 먼저 해야할 것은 TradingView에서 사용하는 FineScript 공부였습니다. 기본적인 문법이나 활용방법은 가이드문서에 매우 잘나와있어 어렵지 않았으나, 이 FineScript가 생각했던 것와 같이 움직이게 만드는 것은 상당히 애를 먹였습니다.
그리고 과거 데이터를 통해 미래의 방향성 혹은 그에 맞는 포지션을 매수/매도 해야하기 때문에 RealTime과 과거 데이터 사이에서 발생하는 리페인트(repaint)현상을 꼭 잡아야했습니다. repaint는 스크립트/스트래티지가 페이지 리프레쉬 뒤 결과가 달라지는 현상을 말하는데, 이는 RealTime과 HistoryData의 근본적인 차이로 인한 결과로 발생합니다.
아래의 링크는 TradingView에서 말하는 repaint 발생 요소의 문제를 다루고 있는 가이드 문서입니다.
스크립트/스트래티지가 페이지 리프레쉬 뒤에 결과가 달라집니다 (리페인팅) — TradingView
kr.tradingview.com
Why do you have to get a repaint? 왜 리페인트를 꼭 잡아야하는 것일까.
스트래티지(전략)을 구현하고 이를 차트에 넣게되면 전략테스터를 통해 해당 전략의 백테스팅 결과를 볼 수 있습니다.
실제 구현된 전략을 SXPUSDT.P에 넣게되면 위의 사진들과 같이 차트에 롱/숏 오픈과 클로즈가 각각 표시되고 이에 따라 오버뷰로 전략테스트 결과를 볼 수 있습니다. 하지만 이를 리플레이 혹은 실제 매매에 투입하게되면 차트에 표시되는 롱/숏 오픈과 클로즈 간의 차이가 발생하는데 이것이 바로 repaint 현상이며, 이는 곧 백테스팅 결과와 다른 결과를 도출하게 됩니다. 실제 트레이딩 차트에서 표시된 롱/숏 오픈과 클로즈를 실제 매매(RealTime)에서도 차이 없이 나오게하려 repaint 현상을 잡는 것은 필수적인 작업요소가 될 것입니다.
리페인트 현상을 잡았다면 전략 얼러트를 활성화 하여 웹훅 매매를 진행합니다.
얼러트의 기간과 설정할 수 있는 갯수는 사용하고있는 플랜 단계에 따라 다르며, 저는 프리미엄을 사용하고 있기 때문에 개방형(무기한) 얼러트로 설정할 수 있습니다. 웹훅 URL을 입력하고 저장 하게되면 TradingView 차트에서 전략에 따른 시그널 발생 시 해당 웹훅 URL로 JSON형태로 입력값이 오게됩니다.
본 글은 웹프로젝트의 기록물입니다.
This article is a record of the web project.
'Side Project > Flask' 카테고리의 다른 글
[Flask] TradingView를 활용한 암호화폐 매수/매도 (3) (0) | 2023.08.28 |
---|---|
[Flask] TradingView를 활용한 암호화폐 매수/매도 (2) (0) | 2023.08.28 |