저번 글 이후로 시간이 많이 흘렀다. 물론 쓰지 않은 가장 큰 이유는 한동안 코인을 쳐다보기도 싫었던 것이다. 그냥 가격이 쭉쭉 내려가니까, 이런 거 해도 뭐 의미가 있나 하는 생각이 계속해서 든 것이다. 그런데 오히려 요즘과 같이 너무 극단적으로 내려가니까, 다시 한번 해보고 싶은 마음이 들어서, 글을 이어서 써본다.
저번 글을 간략히 이어보자면
비트코인과 알트코인은 한 방향으로 움직이긴 하는데, 통계적으로 유의하지 않은 경우가 많다
그리고 이후에 이어질 글로 비트코인-알트코인간의 선형 회귀분석이 아닌 다중회귀 분석을 하기로 했었다. 하지만 이보다 더 재미있는 로직이 생각나서, 기존에 쓰려고 했던 것보다 지금의 글을 써볼 생각이다.
저번의 글에서 데이터만 최신으로 바뀐 그래프다. 각각 비트코인과 이더리움, 비트코인과 니어 프로토콜을 각각 60분, 15분 봉에서 나온 결과이다. 우선 각 축은 각 봉의 종가(close)를 시가(open)로 나눈 값의 log10 값을 사용하고 있다. x축은 비트코인, y축은 알트코인 - 이 경우에는 이더리움과 니어 프로토콜 -이다. 저번과 같이, 같은 분봉 단위라면 이더리움이 니어 프로토콜보다 비트코인과의 선형적인 관계를 띄며, 이러한 선형성은 60분 봉 같이 갈수록 높이지고 있다.
저번에는 여기서 선형성만 생각했지만, 조금 더 깊게 살펴보자. 이 사분면은 무슨 의미가 있을까?
1 사분면(bit>0, alt>0) : 비트코인이 상승했고, 알트코인도 상승했다.
2 사분면(bit <0, alt>0) : 비트코인이 하락했는데, 알트코인이 상승했다.
3 사분면(bit <0, alt <0) : 비트코인이 하락했고, 알트코인도 하락했다.
4 사분면(bit>0, alt>0) : 비트코인이 상승했는데, 알트코인이 하락했다.
저번 글에서 1 사분면과 3 사분면의 의미는 충분히 설명한 것 같다. 아니, 굳이 의미를 찾기보다도 그냥 자연스럽게 이해가 된다. 뭐, 대장이 떨어지면 같이 떨어지는 거지.
하지만 2, 4분면은 분명 뭔가 좀 이상하다. 즉, 비트코인이 떨어졌는데도 올랐다거나, 반대로 비트코인이 올랐는데 떨어진 녀석들 말이다. 그리고 만약 이러한 '이상현상'이 단지 '이상현상'일뿐이고 다시 원래의 궤도로 돌아올 것이다라는 평균 회귀를 믿어본다면, 다음과 같이 말할 수 있다.
비트코인과 가격이 반대로 움직인 알트코인이 있으면, 가격 움직임을 예측할 수 있지 않을까?
그래서 코딩을 해봤다.
1번은 단순하게 upbit에서 비트코인과 대상 알트코인의 ohlcv 값을 데이터 프레임으로 불러온다
2번은 비트코인과 알트코인의 종가를 시가로 나눈 다음, 로그를 취해준 리스트를 반환한다.
3번은 로그 값이 양수면 1, 음수면 -1을 리스트로 반환한다.
그다음 모든 데이터를 데이터 프레임에 저장한다.
여기서 qua라고 표기된 list는 사분면을 저장하기 위한 것이다. 이때 위의 log값을 1과 -1로 나눈 값으로 사분면을 구분할 수 있다. 각 if-else if - else 문을 거치면서 사분면이 각각 1, 2, 3, 4라고 표기된 리스트로 출력된다. 또 이걸 데이터 프레임에 저장한다.
그다음, 알트코인의 상승 1, 하락 -1 리스트를 하나 아래로 내린다(shift). 그리고 윗윗 사진의 quadrant 열과 곱해준다 그러면 이렇게 된다.
가장 마지막 'quadrant win or lose' 행이 집중해보자. 이는 이러한 의미를 갖는다.
만약 내가 어떤 quadrant값을 시그널로 삼아 샀다고 가정해보자. 만약 위 엑셀 시트의 첫 번째 열에서 quadrant 값 1을 신호로 샀다면,
다음 log값의 updown값을 한 행 아래로 내린 값(log_target_updown_shift1)을 보면, 한 봉 이후에 내가 선택한 항목이 올랐을지 내렸을지를 알 수 있다.
이를 알기 쉽게 사분면 값과 곱해주면, 마지막 열이 된다.
즉, 1 사분면을 골랐는데 올랐다면 마지막 열에서 1, 내렸다면 -1이 나타난다. 4분면을 시그널로 했다면, 올랐을 때 4, 내렸을 때 -4가 나타나며 위 엑셀에서는 한번 따고 한번 잃었다.(물론 절대적인 양은 알 수 없음)
그리고 이걸 좀 더 정리해서 각 100개 봉 별로 정리해보자. 즉, 예를 들어 1 사분면을 트리거로 했을 때 내린 +1 값과 -1 값의 비율을 정리하여 가격이 상승한 경우를 퍼센트로 나타낼 수 있다.
1. 3분 봉 100개를 정리한 경우
3분 봉 100개면 300분인데, 이는 약 5시간 정도 된다. 위의 표는 사분면의 승리율(가격이 오른 경우)를 기준으로 sorting 한 것인데, 뭐, 무엇을 고르든 높은 승률을 보여준다. 즉, 지난 5시간 동안 뭘 고르든 절반 이상의 확률로 올랐다는 것을 보여준다.
참고로, 3분 봉의 승리 표(?)에서 80% 이상의 값을 보여준 것, 즉 10번 샀을 때 8번 상승한 코인을 세면,
1 사분면 - 14개
2 사분면 - 11개
3 사분면 - 29개
4 사분면 - 27개
로 나타났다. 예상한 4 사분면의 상승은 생각보다 높지는 않지만, 꽤 괜찮다고 볼 수 있다.
2. 30분 봉의 경우
여기서부터 작은 분봉과 조금 차이가 나기 시작한다. 이것 역시 4분면 선택을 기준으로 sorting 한 것이다. 3분 봉과 달리 무지 성하게 모든 선택에서 상승하지는 않는다.
80% 이상 승리 값도 큰 차이가 나기 시작한다.
1 사분면 - 6개
2 사분면 - 7개
3 사분면 - 5개
4 사분면 - 23개
3. 일봉의 경우
예상과 비슷하게, 1 사분면과 3 사분면을 선택한 경우에 제법 승리율이 높다.
80% 이상 승리 코인들은 다음과 같다.
1 사분면 - 0개
2 사분면 - 6개
3 사분면 - 0개
4 사분면 - 10개
급하게 작성하느라 횡설수설하긴 했는데, 이렇게 정리해 볼 수 있다.
로그 4분면 중 4분면을 선택했을 때 다음 틱에서의 상승은 어느 정도 맞다. 특히 이러한 현상은 duration이 긴 1시간 봉, 일봉에 적용할 수 있다.
다음에는 이 로그 4분면 기법을 자동매매에 적용시켜 실질적인 효과를 살펴보도록 하자.