파이썬을 이용한 자동 거래 - RSI Divergence 수익 분석
이번에는 지난번 알아본 RSI Divergence를 기반으로 한 가상화폐 자동 거래를 실제로 실행하여 그 결과에 대해 이야기해보겠다.
RSI Divergence를 간략히 설명하면 특정구간에서 가격은 하락하지만 같은 지점의 RSI는 상승을 하는 구간을 말하며 이후 가격은 반등하여 상승할 것이라고 예측을 하게 된다.
이러한 RSI Divergence를 기반으로 한 자동거래 파이썬 코드는 아래에 나와있으니 참조하면 되겠다.
자동 거래는 12월 11일부터 12월 28일까지 실행되었으며 이 기간 동안 총 50번 자동으로 거래가 이루어졌고 이 중에서 30번은 이익이 생기는 거래였으며 나머지 20번은 손해를 보는 거래가 있었다.
거래 횟수로는 이익을 봤을 것 같지만 거래당 이익은 작고 손해는 이보다 컸기 때문에 결론적으로는 시작했을 때의 자금에서 큰 이득이나 손해 없이 거의 동일했다.
거래가 이뤄진 유형은 다음의 세 가지 정도로 분류된다고 할 수 있다.
[수익이 발생하는 경우]
아래는 가상화폐 네오(NEO)를 12월 11일 02시 36분에 매수하고 같은 날 02시 56분에 매도를 한 경우이다.
자동 거래의 매수 로직에 따라 RSI Divergence 구간이 발생을 인지하고 이후 RSI 값이 30을 넘는 순간에 매수를 했으며 매수 가격은 10,090원이었다.
그리고 난 후 가격이 급격하게 상승했고 RSI 값이 70을 넘은 다음에 RSI가 이전 값보다 작아지는 순간에 로직대로 매도를 한다.
매도 시의 가격은 10,400원이었으며 이 거래를 통한 수익률은 약 3%였다.
일단 자동 거래 코드가 정상적으로 동작되었고 수익률도 좋았다.
이대로만 동작해주면 매우 좋겠지만 이런 경우는 총 50번의 거래에서 아주 가끔 발생했다.
다음의 경우는 손해가 발생하는 경우이다.
[손해가 발생하는 경우]
아래는 가상화폐 스택스(STX)에 대하여 12월 13일 20시 46분에 매수하여 14일 01시 34분에 매도를 수행한 결과이다.
자동거래 로직에 따라 매수와 매도는 수행되었으나 403원에서 매수 이후 가격이 비교적 큰 폭으로 하락하였고 이후에 횡보하면서 조금씩 올랐으나 RSI 값이 70이 넘고 매도 로직이 수행될 때의 가격은 앞에서의 하락폭을 커버하지 못하여 392원에 매도를 하였다.
그래서 이 거래를 통해서는 약 3%의 손해를 봤다.
여기서 한 가지 수정 보완이 필요한 부분을 찾았는데 그것은 RSI Divergence의 구간이 너무 짧으면 즉, RSI 값의 변화를 너무 민감하게 받아들이면 이는 false 시그널이 될 수 있다는 것이다.
이를 보완하는 방법 중 하나는 RSI 값이 최소가 되는 두 지점이 최소 5개의 데이터 이상이 지난 이후에 즉, 5분 봉 데이터에서는 25분 이상 시간 간격을 두고 이벤트가 일어나야 RSI Divergence가 발생했다고 인지하도록 하는 것이다.
이는 이전 자동거래 코드에서 아래의 코드처럼 조건을 하나 더 추가하면 된다.
if temp01_min_rsi > temp02_min_rsi and temp01_min_price < temp02_min_price and len(RSI.iloc[len(df)-1-m:len(df)-2-k]) > 5:
그러나 이 수정을 통해서 위와 같은 경우를 모두 피할 수 있는 것은 아니며 또한 반대로 이익을 볼 수도 있는 거래를 건너뛰는 경우가 발생할 수도 있음을 고려해야 한다.
[가격의 횡보에 따른 이익 또는 손해]
사실 총 50번의 거래에서 대부분의 거래는 다음의 형태를 갖는다.
아래는 가상화폐 하이파이(HIFI)에 대해 12월 11일 16시 31분에 매수하여 같은 날 23시 31분에 매도를 한 것이다.
매수는 분명 RSI Divergence가 발생하여 수행되었지만 가격이 횡보하면서 매도가 일어나는 시점이 매수 가격보다 높을 수도 있고 낮을 수도 있다.
이를 통해 알 수 있는 것은 RSI Divergence가 발생했다고 반드시 다음 가격의 상승이 일어나는 것은 아니다.
또한, 위의 경우는 매도 조건보다는 매수 직후 상승을 계속할 때에 매도를 했으면 이익을 볼 수 있었다.
가상화폐 매매를 공부하면서 다시 한번 느끼는 것이지만 매수보다는 언제 매도를 하느냐가 더욱 중요한 것 같다.
[결 론]
RSI Divergence를 기본으로 한 가상화폐 자동 거래 로직을 실제로 실행해본 결과 큰 수익도 또 큰 손해도 보지 않았다.
그러나 MACD나 Bollinger Band 등 다른 지수를 이용하여 자동 거래를 했을 때는 결국 손해를 봤는데 그것보다는 결과가 좋았던 것 같다.
RSI Divergence가 발생했다고 이후에 항상 가격이 상승한다고 볼 수는 없을 것이다.
그렇지만 특별한 경우를 제외하고 매수 이후 가격이 크게 하락하는 경우는 많지 않았다.
RSI Divergence가 발생했다는 것 자체가 이미 가격이 어느 정도 하락한 경우이기 때문일 것이다.
이 로직을 보완할 수 있는 방법은 우선 좀 더 확실한 RSI Divergence 구간임을 확인하는 로직으로 보완하는 것이 있겠다.
앞에서도 잠깐 언급했지만 너무 짧은 구간으로 RSI Divergence가 발생한 것은 배제하고 또한 RSI 값이 30 밑으로 잠깐 내려갔다가 올라오는 것도 배제할 수 있으면 좀 더 확실한 RSI Divergence를 확인할 수 을 것이다.
앞에서 첫 번째 유형으로 이익이 발생한 거래의 경우가 좋은 예가 되겠다.
두 번째는 매도 로직의 보완이다.
현재 RSI 값이 70을 넘고 이후에 하락하는 구간에서 매도를 하는 것 대신에 특정 시간 이후에 매수 가격보다 높으면 매도를 하는 방법도 있을 것이고 RSI 값 기준을 60으로 낮추는 방법도 있을 것이다.
원래 RSI Divergence는 발생 이후 가격이 상승추세가 될 것이라는 것을 전제로 하는데 그것이 반드시 RSI 70을 넘는다는 보장이 없기 때문이다.
결국 특정 시간이 지나면 더 이상은 RSI Divergence에 의한 영향이라고 볼 수 없을 것이다.