본문 바로가기

바이낸스 가입방법
  • 코인 잡기술 블로그
기술/지표 알림

VWAP(거래량가중평균가격) 지표 계산 및 알림

by 금붕맨 2023. 5. 12.
반응형

VWAP(거래량가중평균가격)

  1. VWAP
  2. 계산식
  3. 파이썬 코드
  4. 전략
  5. 결과

VWAP 지표

 

1. VWAP

VWAP란 Volume-Weighted Average Price의 약자로 한글로 번역하자면 거래량 가중 평균 가격이라는 뜻입니다. 이름에서 알 수 있듯이 거래량과 결합된 지표로 이전에 다루었던 이동평균, RSI, MACD, 볼린저밴드처럼 종가기반의 지표들과는 확실히 차별점이 있어 보입니다.

 

거래량은 저를 포함한 많은 투자자들이 자산 차트에서 가격 변동을 제외하고는 가장 중요한 지표로 보고 있습니다. 그런 거래량을 어떤 식으로 결합하고 이 지표가 어떤 의미를 갖고 있는지 생각하시면 더욱 효율적으로 사용하 실 수 있다고 생각합니다.

 

VWAP 설정

바이낸스 지표 설정 창을 확인해 보면 Length라는 기간을 조정할 수 있는 수치가 하나 있습니다. 자산 그래프와 같은 시계열 데이터들을 분석하는 지표들 대부분 기준 간격이 필요하며 VWAP는 이동평균들과 마찬가지로 그 길이만 제시하면 되는 지표입니다. 바이낸스에서는 디폴트값이 14로 설정되어 있네요.

 

VWAP

지표 저장을 눌러주고 차트로 돌아와 확인해 보면 언뜻 이동평균선과 비슷하게 보입니다. 이제 뒤에 계산식을 살펴보고 거래량과 가격이 어떤 방식으로 결합되어 있는지 이해하시면 이동평균과 무슨 다른 의미를 가지는지 알게 되실 겁니다.

 

 

2. 계산식

VWAP = ∑ (Typical Price * Volume ) / ∑ Volume

Typical Price = (High + Low + Close) / 3

계산식을 보면 한눈에 이해가 될 만큼 단순이동평균과 비슷합니다. 다른 점은 2가지 정도로 첫 번째, 종가를 쓰지 않고 Typical Price라는 고가, 저가, 종가의 평균 가격을 쓴다는 점과 두 번째, 단순히 기준 기간으로 나누어 평균을 내는 것이 아닌 각 캔들의 Typical Price와 거래량을 곱한 후 14 기간 동안 합한 값에 14 기간 동안 합한 거래량을 나누어 평균을 구해준다는 점입니다. 거래량이 어떤 식으로 결합되는지 쉽게 이해할 수 있는 단순한 식이었습니다.

 

Typical Price Volume ∑(Typical Price*Volume) ∑(Volume) VWAP
3 3 9 3 3.00
4 4 9+16 = 25 7 3.57
7 4 16+28 = 44 8 5.5

Length를 2로 했을 경우 예시를 들어 본 것이니 참고하시길 바랍니다. 여기서 시그마는 Length기간 동안의 합을 의미하고, 거래량은 거래대금이 아닌 단순 거래량을 의미하니 주의하시길 바랍니다.

 

 

3. 파이썬 코드

import binance as bn
import pandas as pd

def vwap(symbol, interval, length):
    try:
        df = bn.get(symbol, interval)
        close = df['close']
        high = df['high']
        low = df['low']
        vol = df['volume']

        tp = (close + high + low) / 3
        wtp = tp * vol
        sum_wtp = wtp.rolling(window=length, min_periods=1).sum()
        sum_vol = vol.rolling(window=length, min_periods=1).sum()
        VWAP = sum_wtp / sum_vol

        return VWAP

    except Exception as e:
        if str(e).startswith('429'):
            bn.tel_text(symbol + "  " + str(e))
        else:
            pass

requests의 get함수를 이용하여 Kline의 url을 입력해 주면 종가, 고가, 저가, 거래량 모두를 얻을 수 있으니 코인 한 개의 1000개 캔들을 가져올 시 바이낸스 API 요청 횟수 단 1회 만을 소모합니다.

 

sum_wtp와 sum_vol을 구할 경우 이동평균처럼 rolling을 쓰고 뒤에 평균 mean()이 아닌 sum()을 사용해 줍니다. min_periods=1은 window=14보다 작은 행인 0~12행의 값이 NaN이 아닌 값을 나타내고 싶을 경우 사용하는 것입니다. 바이낸스 차트는 첫 캔들의 VWAP가 표시되어 있으므로 min_periods=1을 넣어야 됩니다.

 

binance모듈의 get() 함수는 제가 자주 쓰는 코드를 정리하여 쓴 것이니 이전 글 참고해 주시길 바랍니다.

 

'기술/코인 알림 봇 만들기 (기초)' 카테고리의 글 목록

코인 금붕어의 코인 반성문

goldfishman.tistory.com

 

print(vwap("BTC","1d",14))

0      11837.466667
1      11839.772292
2      11994.610453
3      12010.963303
4      11959.235547
           ...     
995    28744.417280
996    28751.907847
997    28745.713587
998    28665.673156
999    28503.531290

 

거래량가중평균가격

실행을 하게 되면 1000개의 비트코인 캔들로부터 1000행으로 이루어진 VWAP값을 얻을 수 있습니다. 어제의 값에 해당하는 998행의 값과 실제 차트에 표시되는 VWAP값을 비교해 보면 알맞게 계산이 된 것을 확인할 수 있습니다.

 

 

4. 전략

VWAP 전략

위 차트에 표시해 둔 것처럼 가장 흔하고 간단한 전략인, 시세가 VWAP 위로 뚫었을 경우를 조건으로 알림을 설정해 보도록 하겠습니다. 단, 검증되지 않은 전략이니 따라 하시는 일은 없길 바랍니다.

 

import binance as bn
import pandas as pd
import threading

tickers = bn.tickers("all")

def run():
    for i in tickers:
        close = bn.get(i, "1d")['close']
        close998 = close.iloc[-2]
        close997 = close.iloc[-3]
        vwap = bn.vwap(i,"1d",14)
        vwap998 = vwap.iloc[-2]
        vwap997 = vwap.iloc[-3]

        if close997 < vwap997 and close998 > vwap998:
            bn.tel_text(i + " VWAP 돌파")

    threading.Timer(86400, run).start()

run()

vwap를 계산하기 위해 get() 함수로 url을 한번 요청해야 하고 close 시리지를 불러오는 데 또 get함수를 사용하여 url을 요청하였습니다. 이렇게 되면 같은 데이터에 대한 API요청을 2회 한 것이므로 쓸데없는 낭비입니다. 바이낸스 API는 1분에 1200회 만을 요청할 수 있으니 줄일 수 있으면 줄이는 것이 바람직합니다. 다음부터는 df를 앞으로 빼놓고 함수를 정의할 필요가 있어 보입니다.

 

 

5. 결과

코인 알림

총 4개의 코인이 조건을 만족하여 알림이 왔습니다.

 

ARPA코인

ARPA코인을 확인해 보니 전날 상승을 보이면서 VWAP를 돌파했네요. 알림에 이상은 없어 보입니다. 물론 다른 지표와 섞어서 사용하셔도 되고 단독으로 사용하셔도 됩니다.

 

알아두어야 하는 것은 이전에 살펴보았던 이동평균, RSI, MACD, 볼린저밴드 같은 지표들은 종가를 바탕으로 이루어진 지표이고 이번 VWAP는 거래량을 결합한 지표라는 것입니다. 확신할 수는 없지만 종가기반 지표들로만 조합하여 사용한다면 한계가 있다고 생각하니 서로 다른 기반의 지표들과 섞어 사용하는 것을 추천드립니다.

반응형

'기술 > 지표 알림' 카테고리의 다른 글

Parabolic SAR 계산 및 알림  (297) 2023.05.24
TRIX 계산 및 알림  (419) 2023.05.13
볼린저밴드 BOLL 텔레그램 알림  (451) 2023.05.10
바이낸스 롱/숏 비율 알림 받기  (429) 2023.04.16
MACD 알림 설정하는 방법  (415) 2023.04.13

댓글