이제 최적화를 하는 방법을 배우셨으니, 이동평균선으로 아주 간단한 전략을 세워보고, 최적화를 단계별로 진행해보겠습니다! 오늘은 어려운 수식은 나오지 않기 때문에, 편하게 보실 수 ... 있습니다!
이동평균선
일단! 복습부터 하고 넘어가시겠습니다~
이동평균선이란 가격의 종가를 평균을 내어서 만든 선으로, 그냥 최근 가격의 평균값 정도로 해석하실 수 있습니다. 평균 가격을 현재 가격이랑 비교를 하는 지표이기에, 현재 가격의 추세를 해석하는데 매우 용이한 도구 입니다.
이동평균선을 해석하는데 크게 2 가지를 보실 수 있습니다.
- 이동평균선의 각도
이동평균선의 각도의 경우 올라가고 있으면 상승, 내려가고 있으면 하락으로 해석합니다.
- 현재 가격과 비교
보통 가격이 이동평균선 위에 있으면, 현재 가격의 평균 가격보다 높음으로 추세가 대체로 상승 중 이다 라는 점을 유추할 수 있습니다.
여기서 가격은 평균 회귀를 생각하시는 분들이 분명 계실텐데, 실제로 가격이 움직이는 패턴을 살파보면,
- 이동평균과 멀어짐 - 수익을 내는 트레이더 진입
- 이동평균에서 멀어지는 속도가 가속화 - 수익을 내는 트레이더 청산 / 손해를 보는 트레이더 진입
- 평균 회귀 - 손해를 보는 트레이더 청산
위와 같은 사이클을 이어 갑니다.
이러한 현상을 설명 하기 위하여 극단적으로 설명을 붙여봤습니다. 먼저 이동평균에서 멀어지는 순간부터는 수익을 내고 있는 트레이더가 진입을 하며, 가속화 구간에서 물량을 손해를 보는 트레이더에게 넘깁니다. 그리고 손해를 보는 트레이더는 평균 회귀하는 구간에서 손해를 보게 되죠.
물론 가속화 구간에서 사용할 수 있는 전략도 있습니다. 예전에 소개시켜드린 ADX 를 활용하여, 과매수 구간의 큰 변동성을 이용하는 전략 처럼 말이죠!
전략
그래서 언제 사고 팔아야 할까요?
일단 추세가 가속화 되고 있는 구간을 정의하는건 상당히 까다롭고 복잡합니다. 오늘은 기본에 충실하기로 약속드렸으니, 모든 것을 이동평균선만을 이용하여 만들어보도록 하겠습니다.
즉, 그림처럼 이동 평균선 위에서 매수를 하고, 이동평균선에 붙으면 파는 간단한 이동평균선 돌파 매매 전략을 사용해볼 것 입니다.
1 단계
쉽게 쉽게 시작해보자구요! 한 개의 이동평균선에 대해서, 가격의 종가가 이동평균선을 상방으로 뚫으면 매수!, 하방으로 뚫으면 매도!
주기는 50 주기를 사용해보자구요~
input1 = input(50)
MA1 = sma(close, input1)
plot(MA1)
Buy = close > MA1
Sell = close < MA1
if (Buy)
strategy.entry("long", strategy.long)
if (Sell)
strategy.close("long")
요렇게 순서대로 넣어줍니다. 이동 평균선 50 주기를 정의해주고, 그려줍니다. 그리고 종가가 이동평균선보다 클 때에는 매수 / 종가가 이동평균선보다 작을 때 에는 매도 라는 정의를 해주고, if 구문과 매수 전략 함수를 사용하여 Buy 일땐 매수 주문을, Sell 일 때에는 매도 주문을 넣어줍니다.
다듬어야 할게 한 두개 가 아닙니다. 당연합니다. 모든 전략은 이런 간단한 전통적인 아이디어에서 발전 시키는 것이지요!
- 진입 횟수가 과하게 많다.
한 시간 봉 기준으로 트레이딩뷰에서 제공하고 있는 데이터는 2018년 1월 부터의 데이터 입니다. 1년 6개월 동안 4백번 진입이면 어마어마하게 진입을 한 것 입니다.
- 선에 걸쳐 있을 경우 반복 진입이 매우 많다.
위와 같이 걸쳐 있는 경우에 과하게 진입 횟수가 많습니다. 적당히 진입횟수가 많을 경우 통계적 이점으로 해석하고 확률에 대한 신뢰도를 높이는데 사용되지만, 과하게 많을 경우 수수료와 슬리피지도 생각을 해봐야 하기에 위와 같은 47% 수익률을 내고 있어도 손해를 볼 가능성이 없지않아 있습니다.
그리고 위 전략에 대한 좋은 점도 보입니다.
- 돈이 벌린다.
가장 중요한 점 입니다. 대충 만든 1시간 봉에 대한 전략이지만, 돈이 벌립니다.
- 비트코인이 하락한 낙폭에 비해, 최고 손실률이 낮다.
비트코인이 약 80% 정도 하락했음에도 불구하고, 전략으로는 37% 손실률을 기록하여 어느정도 손실률을 방어했다는 점을 확인하실 수 있습니다.
2 단계
진입을 굉장히 많이 하지만, 상승 추세가 뚜렷하지 않은 구간에서도 진입하는 모습이 보입니다. 이동평균선 추가적으로 넣어 추세에 대한 기준도 포함시켜줍시다!
input2 = input(50)
두 번째 인풋을 정의해주고
MA2 = sma(close, input2)
두 번째 이동평균선을 만들어주고
trend = close > MA2 and MA2 > MA2[1]
추세에 대한 정의로 종가가 2번째 이동평균선 위에 있으며, 이동평균선이 상승하고 있다 라는 점을 정의해줍니다!
if (Buy and trend)
그리고 if 구문안에 Buy and trend 를 넣음으로써 상승 추세에서 발생하는 시그널에 대해서만 반응하도록 설정해줍니다!
크흐 벌써 개선사항이 보입니다.
진입 횟수가 줄었습니다. 443 -> 325
진입 횟수가 줄은 점은 수수료가 그만큼 줄었다는 점이며, 충분한 횟수를 가지고 있음으로 통계적으로 신뢰도를 가지고 있다라는 점을 부각 시킵니다.
수익률이 올라갔습니다. 47% > 75%
전략은 돈을 마니 벌 수록 좋습니다. 1.5 배 정도 상승했군요.
최대 손실률이 늘어났습니다. 37% -> 39%
아쉬운 부분입니다. 이전보다 최악의 경우 돈을 더 많이 잃습니다.
비교 분석
개선된 사항을 정리해보면, 손실률이 2% 증가했지만, 수익률이 28% 증가했다는 점을 확인 해보실 수 있습니다. 118 회 덜 진입하니, 현실적으로는 아마 2% 에 대한 손실률은 수수료 절감 효과로 매꿀 수 있어보이는 군요. 좋습니다.
3 단계
이제 최적화 시간 입니다. 모든 전략들에는 최적화가 필수적이죠. 변수가 많지 않으니, 두 가지 이동평균선의 주기를 조절하는 형태로 최적화를 진행해보겠습니다.
https://www.steemcoinpan.com/sct/@roostermine/36-volatility-stop-iii
요 포스팅에서 배우신 내용을 기반으로 "야매" 최적화로 진행합니다~ :)
먼저 진입의 기준을 정하는 친구부터 !
최적화할때에는 UI 에서 숫자 변경 후 수익률 변하는 것을 보는 것이 가장 편함으로, input 으로 아까전에 코딩했습니다. 만약 코드로 하셔도 상관없다면, input 대신 그냥 숫자를 넣으셔도 괜찮습니다!
이제 Input1 자리에 10 부터 200 까지 넣어서 수익률을 정리해보겠습니다! 진입 횟수 및 최고 손실률까지 포함하면 너무 복잡해지기에, 수익률 기준으로만 정리하겠습니다! :)
그래프로 나타내면 주기별 수익률이 이러한 모양이 나오는군요.
110 주기와 170 주기가 가장 좋게 나옵니다. 둘이 비슷하니 자세히 살펴보죠!
110 주기
110 주기의 스펙 입니다!
진입 172회 / 최고 손실률 26.77%
180 주기
180 주기의 스펙은
진입 129회 / 최고 손실률 24.65 %
비교 분석
진입 횟수는 둘 다 100회는 넘으니, 통계적으로 어느정도 신뢰는 가능하다고 판단이 되고.... 손실률을 비교하면 180 주기가 낫네요. 거기다 180 회 의 경우 진입 횟수가 더 적으니 수수료를 절감시킬 수 있는 효과도 있구요!
4 단계
이제 진입 이동평균선을 180 주기로 잡고, 추세에 대한 이동평균선을 조정하여 최고 수익률을 만들어볼 것 입니다!
Input2 자리에 10 부터 200 까지 넣어서 수익률을 분석해볼 거에요~
이친구도 피크가 두 개 보입니다. 추세를 10을 줬을 때랑, 140 줬을 때! 위와 동일하게 비교 분석을 해줍니다!
10 주기
10주기를 줬을 경우 스펙은
159회 진입 / 27.94% 최고 손실률
140 주기
140 주기 스펙은
94회 진입 / 22.49% 최고 손실률
딱봐도 140 주기가 좋아보이죠?
총체적 비교 분석
이제 위에서 구한 네 가지 단계들에서 산출한 데이터들을 모아서 분석해봅시다! 얼마나 전략이 최적화/나아졌는지 눈으로 봐야 믿고 쓰죠? :)
진입 횟수 443 -> 94
4분의 1로 줄였습니다.
수익률 47% -> 122.29%
수익률은 거의 2.5배?
최고 손실률 37% -> 22.49%
최고 손실률도 40% 가량 줄였습니다.
통계가 정답은 아니다!
물론 통계가 큰수의 법칙에 따를때, 과거의 패턴이 반복될 때 에는 신뢰가 가능하지만, 무조건적으로 "항상" 맞는 것은 아닙니다. 하지만 뇌동매매를 하는 것 보다는 그냥 이동평균선을 이용하여 매매를 하면 적어도 수익은 낸다는 점을 눈으로 확인하실 수 있습니다. 특히, 3번째 최적화 단계에서 어떤 주기의 이동평균선을 사용하더라도, 한 시간 봉에 대해서 수익을 낼 수 있다는 점을 확인하셨습니다.
차트 분석보다 데이터 분석이 더 많아지는 시점이 드디어 왔네요! 모두들 파이팅 입니다!
질문, 댓글, 팔로우는 감사합니다!
새로운 아이디어, 종목 추천 등은 언제나 환영입니다!
오오. 신기방기 응원합니다~ 뭔가 글만 보는데 왜 제가 뿌듯한 느낌일까요? ㅋㅋ 앞으로도 화이팅입니다! ^^
최고의 전략을 찾는 그날까지 달려보겠습니다~ ㅎㅎㅎ
루스터님의 수작업을 보니 최적화를 위해 파이쏜으로 코드를 돌려보고싶군요 ㅎㅎㅎ
디제이님의 파이썬 코드 강좌 가나요~~~~!!! (기대기대)
아...
강좌 자체는 이미 정리해놓은 것도 있고 어렵지 않은데 크립토의 경우 가격 정보를 얻는게 좀 어렵더군요.
Posted using Partiko Android
오오오오옹!!!!! 대박!!!!! 아마 찾아보면 시간봉 데이터는 쉽게 찾아지는 것 같은데... 거래 내역 같은 부분은 직접 마이닝을 해야할 것 같아요 ㅠㅠ