시스템트레이딩

[업비트 시스템 트레이딩] 2024.05.13 / MACD

joggerin 2024. 5. 13. 17:03
728x90

0. Summary

1. 보조지표를 구현하여 매매 시점 포착
2. 그 중에 첫 걸음으로 MACD에 대해서 공부
3. 실제 코딩해서 결과 확인해보기

 

1. 보조지표를 이용한 시점 포착

● 여러가지 지표를 활용하여 매매 시점을 포착하려고 한다.

기본적으로는 거래량, 추가적으로는 MACD, RSI, MFI 등의 다양한 지표를 활용하여 시스템트레이딩에 녹여냄으로써 매매시점을 포착할 수 있도록 알고리즘을 구성해보려고 한다.

일반적으로 하나의 보조지표로만 판단하기에는 매매의 신뢰도를 높이기가 쉽지 않다. 그러므로 여러 지표들을 혼합하고 weighted 한 값을 줌으로써 개인적인 알고리즘 전략을 구축하려고 하고 있다.

● 개인적인 선호도: MACD

그 중에서 가장 개인적으로 보기 쉬운 MACD를 우선 구현해보고, 이것으로 시스템트레이딩 매매 추세를 확인하여 시점 포착을 해보려고 한다.

 

아래와 같이 테스트 예정이다.

1차: MACD 정의
2차: MACD 구현
3차: 가상 & 백데이터 테스트
4차: 실전도입

 

2. MACD 기본 개념

● MACD란?

간단히 요약하면 아래와 같다.

1. Moving Average Convergence Divergence의 약자
2. 장,단기 지수 이동평균선의 차이를 이용한다.
3. 지수 이동평균선의 추세전환을 확인 가능
4. 수렴(convergence), 발산(Divergence)
5. 보조지표

* 출처: 나무위키 & 네이버 지식백과

● 지수이동평균(Exponential Moving Average: EMA)

일반적인 이동평균선이 아니라 '지수'의 개념이 들어간 이동평균선을 구해야 한다. 그럼 다른 이동평균선도 있을까? 하는 의문이 생겨서 찾아봤다.

● 그 외에는 2가지 이동평균이 있다.

1. 단순 이동평균: SMA: Simple Moving Average
2. 가중 이동평균: WMA: Weighted Moving Average

단순이동평균은 정말 말 그대로 이동된 값에 대한 평균을 구하면 된다. 하지만 가중이동평균은 최근의 데이터에 좀 더 무게를 두고(Weighted) 중요한 가치를 가지도록 계산을 한다. 예전 값은 비중을 적게 주고, 최근 값은 가중치를 높게 부여해서 weighted sum을 하는 개념이라고 생각이 된다. 

● 위 2개 이동평균선은 나중에 다시 확인

MACD에서 사용하는 것은 EMA 이므로 지수이동평균을 기본으로 구현을 해보려고 한다. 결국 이런 것들도 누군가 만든 지표이기 때문에 이 부분에서 아이디어를 얻어서 나만의 이동평균선을 만들어볼 수도 있을 것 같다.

● MACD 구현의 기초

총 3개의 지수 이동평균선이 필요하다

1. 장기 지수이동평균선
2. 단기 지수이동평균선
3. 시그널

 

얘네들은 모두 이동평균선이며,

26일(장기) / 12일(단기) / 9일(시그널) 이평선이다.

 

우리가 MACD라고 부르는건 (단기 - 장기) 이며

이 값과 시그널이 교차되는 지점을 해석하여

수렴(convergence)과 발산(Divergence)를 판단한다.

 

즉, macd와 signal을 구하는 것이 최종 목표이고

이걸 구하기 위해서 9/12/26일 지수 이동평균선이 필요하다.

 

3. MACD 계산해보기

● 위키독스 참고

이미 MACD를 계산할 수 있도록 구현된 기능이 있다. 아래 내용은 위키독스에서 참고를 했다.

ewm는 지수가중함수 입니다. 지수가중함수는 오래된 데이터에 지수감쇠를 적용하여 최근 데이터가 더 큰 영향을 끼지도록 가중치를 주는 함수입니다.보통 추가 메서드로 mean() 을 사용해서 지수가중평균으로 사용합니다.

(참고자료: https://wikidocs.net/152787)

 

계산된 결과가 내가 예상한 것과 차이가 있어서 검색을 추가로 진행했고, 이미 선구자분들이 많은 노력으로 구현된 코드를 구현해 놓은 결과물 들이 있었다. 결론적으로는 adjust를 셋팅하지 않아서 문제가 있었고, 이를 False로 셋팅하니 비슷한 결과를 얻을 수 있었다. 

 

ewm에서 adjust 설정은 false로.ewm에서 adjust 설정은 false로.
ewm에서 adjust 설정은 false로.

(참고자료: https://waymond.tistory.com/138)

● 다음 포스팅에서 이어서... ㅜ

직접 만든 코드에 이것저것 붙이다 보니깐 오히려 헷갈리고 문제가 되는 부분이 많아서 디버깅하는데 시간이 더 걸리고 있다. 내걸로 소화를 한 다음에 더 진행을 해야겠다는 생각이 들었다.

 

4. 기타

● 본인이 만든 함수가 include가  되지 않을떄

코드길이가 길어지게 되면 가시적인 효과가 떨어지므로 자주 쓰는 함수들은 별도의 디렉토리를 만들어서 관리하는 것이 좋다. 근데 이때 새로 함수를 추가하고 compile을 해서 문제없이 .pyc파일을 만들었음에도 불구하고 메인코드에서 에러가 나는 경우가 많다. 함수를 찾지 못한다고 ... 

 

그럴때는 프로그램을 re-launching 해본다.

내부적인 루틴이 꼬여있을 수 있으니

한번 reset을 해주는건 도움이 된다. 

 

혹은 vscode(Visual Studio Code)를 사용한다면 아래의 Restart 버튼을 클릭하는 것도 비슷한 효과를 얻을 수 있으니 참고하길 바란다.

Restart로 파이썬 재실행
Restart로 파이썬 재실행

 

5. 주의사항

투자는 항상 본인의 선택이고 그에 따른 결과도 책임을 져야 한다. 해당 포스트 뿐만 아니라 이 블로그의 모든 글은 개인적인 의견일 뿐이니 조심해야 한다

728x90