시스템트레이딩

[업비트 시스템 트레이딩] 2024.05.25 / 엔벨로프(envelope)

joggerin 2024. 5. 25. 00:54
728x90

0. Summary

1. envelope: 상단,하단을 나타내는 선
2. 
3. 장기로 볼지, 단기로 볼지는 고민중

 

1. envelope란?

● envelope의 사전적 정의

봉투라는 뜻이 제일 많이 나온다.

그 외에는 경계선 등으로도 해석이 된다.

● envelope의 주식시장에서의  의미

추세 중심선을 기준으로 상단에 선이 하나 있고, 하단에도 선이 하나 있다. 이걸 토대로 주가가 상승하는지 하락하는지 추세전환을 확률적으로 확인할 수 있다. 

● 그대로 믿어도 되는지?

모든 보조지표는 어디까지나 참고용이다. 절대로 맹신해서는 안된다.

 

 

2. envelope를 어떻게 구할 것인가?

● 계산의 기본 개념

일반적으로 20일 단순이동균선을 중심으로 놓고 계산을 시작한다.

상단은 중심선 x (1+상단폭), 하단은 중심선 x (1-하단폭)으로 계산을 하면 된다. 

결국 둘다 상,하단 저항선이라고 볼 수 있고, 크게 어렵지 않은 계산법이라고 볼 수 있다.

● 단순이동평균선부터 구해보자

단순이동평균선은 얼마전 포스팅했던 get_ohlcv를 시점으로 계산할 수 있다.

다시 한번 적어보면 이것은 open, high, low, close, volume의 약자이고,

시가 , 고가, 저가, 종가, 거래량을 의미하는 것이다.

이것을 토대로 받아온 데이터를 dataframe에 담아서 20일 단순이동평균선을 구할 수 있다.

 

 

3. chatGPT를 이용한 로직 구현

● chatGPT에 이동평균선 구하는 방법 물어본 결과는 아래와 같다.

import pandas as pd

# 예시 데이터프레임 생성
# 실제로는 주식이나 암호화폐의 가격 데이터를 불러와야 합니다
data = {
    'date': pd.date_range(start='2023-01-01', periods=100, freq='D'),
    'close': [i + (i % 10) for i in range(100)]  # 임의의 종가 데이터
}
df = pd.DataFrame(data)

# 날짜를 인덱스로 설정
df.set_index('date', inplace=True)

# 20일 이동평균선 계산
df['20_MA'] = df['close'].rolling(window=20).mean()

# 결과 출력
print(df.head(25))

 

● 결과를 토대로 다시 작성

우선은 아래처럼 작성해서 gel_ohlcv를 이용해서 dataframe을 가져오고, 여기서 종가인 close만 취해서 프린트해보면 위 그림처럼 20개의 데이터를 얻을 수 있다. 

20일 동안의 종가 구하기
20일동안의 종가 구하기

 

● 이동평균값 구하기

평균값을 계산해보면 NaN(**Not a Number)이 나오다가 마지막인 5월 24일에 정확한 결과가 나오는 것을 확인할 수 있다. NaN이 나오는 이유는 20일 이동평균선을 구하기 위해서 20개의 결과가 필요한데, 이 데이터들이 없기 때문이다. 즉, 하나라도 데이터가 누락되면 계산이 될 수 없는 것이다.

 

20일 이동평균 구하기
20일 이동평균 구하기

 

● 업비트의 기본값은 20,10,10인듯

업비트 기본차트에서 엔벨로프를 활성화시키면 아래 그림처럼 20일 이동평균선 및 10% 위, 아래로 설정된 것을 확인할 수 있다. 지금 만드는 코드도 비슷하게 나오는지 확인해보려고 하는데, 생각해보니 값이 약간 다르다.

 

내가 추출한 값은 90617350인데, 업비트에서 계산한 값은 90627450이다. 10100의 차이가 발생했다...;; 계산이 어렵지 않은 구간이라서 뭐가 잘못된건지 ...이런게 참 어렵다.

 

● 디버깅

알고봤더니 오늘 날짜에 대한 이동평균선이므로 장이 끝나지 않아서(코인은 장이라는게 따로 없긴 하지만) 계속 값이 변하는 것이었다. 안정적으로 25일정도의 데이터를 받은 후에 얘네들에 대해서 mean값을 구하게 되면 어제 날짜 기준으로 값이 동일한 것을 확인할 수 있다.

25일동안의 데이터를 받도록 변경
25일동안의 데이터를 받도록 변경
2024-05-23 기준으로 90421100으로 동일한 결과를 얻을 수 있다.
2024-05-23 기준으로 90421100으로 동일한 결과를 얻을 수 있다.

 

위 값에서 10% 씩 밴드를 설정해주면 엔벨롭이 계산된다.

이걸 통해서 투자를 판단할 수 있을 것으로 기대된다.

 

 

4. 주의사항

투자는 항상 본인의 선택이다.

그에 따른 결과도 본인이 책임을 져야 한다.

알고리즘을 만들면서 항상 주의를 하고 있다. 

 

그리고 해당 포스트 뿐만 아니라 이 블로그의 모든 글은 개인적인 의견일 뿐이니 조심해야 한다

728x90