빙구처럼 트레이딩: 코인 차트 "처음부터" 공부하기 #40- 복합 전략 만들기 III (Candle Pattern, MA, ATR)
어떻게 보면 MACD , RSI 조합보다도 처음 배우실 때 접하시는 정말 기본적인 캔들 패턴과, 이동평균선 MA 로 전략을 구성해보겠습니다. 물론 "인간의 직관" 이라는 부분을 코드로 나타내야 하게이, 변동성을 표현해주는 ATR 을 섞어서 활용하게 됩니다!
캔들 패턴 참조 자료
MA 참조 자료
아이디어
아이디어는 간단합니다. 상승 추세에서 캔들 패턴이 발생할 경우 진입하며, 청산은 가격이 이동평균선을 돌파할 때 청산을 하는 아~주 간단한 전략 입니다.
일단 가격이 이렇게 올라가고 있다고 가정합니다.
이제 이동평균선 적용하면, 이런 우상향 하고 있는 상승 추세의 모양으로 만들 수 있습니다.
캔들 패턴이 이동평균선이 상승 추세를 가르킬 때 발생할 경우, 매수 진입을 합니다.
이제 손절/익절용 이동평균선을 하나 추가하여, 가격이 2번째 이동평균선의 가격 아래로 돌파할 경우 청산합니다.
사용할 보조지표
추세: Moving Average
진입 시그널: Candle Pattern
변동성: ATR
손절: Moving Average
위에서 간략히 설명을 드렸다시피, 추세는 이동평균선으로 확인 후, 추세가 일치하는 방향으로 캔들 패턴 발생시 진입합니다.
변동성에 대한 체크는 진입할 때 확인해줍니다. 어느정도 변동성을 가지지 않은 캔들 패턴의 경우 신뢰도가 매우 떨어집니다.
2 번 째 이동평균선을도입하여, 손절 및 익절을 위한 이동평균선도 추가해줍니다. 옼훼위~
스크립트 세팅
strategy("Awesome SteemCoinPan #19", overlay=true, default_qty_type=strategy.cash, default_qty_value=1000, initial_capital=1000, currency="USD")
매번 해도 매번 까먹은 스크립트... 맨날 deafult 값들 잘못 써서 "이거 왜 다르지?" 라는 생각을 하게 만들죠... ㅋㅋㅋ 헷갈리기 전에 미리 넣어 놓습니다! 벌써 보조지표 제작한 보조지표가 19개나 되네요 ㄷㄷ
추세의 기준: 이동평균선 (Moving Average)
모든 트레이딩의 기본은 추세 라고 생각합니다. 그리고 그 중 가장 편리하고, 기초적이면서도, 가장 유용한 이동평균선! 간단하게 넣어줍니다.
trendMAinput = input(50)
trendMA = sma(close, trendMAinput)
최적화를 해야하니깐, input 처리 해줍니다.
trendMAcondition = close > trendMA and trendMA > trendMA[1]
그리고 진입에 대한 조건을 달아줍니다. 추세를 뜻하는 이동평균선 위에서 종가를 마감하고, 이동평균선이 상승하고 있을때!
진입의 기준: 캔들 패턴 (Candle Pattern)
캔들 패턴을 소개시켜드리며 여러가지 패턴들을 소개시켜드렸으나, 이번에 사용할 캔들 패턴은 "장대 양봉" 패턴 입니다. 장악형 캔들 또는 3캔들 패턴의 경우는 "저점" 에서 발생하는 경우가 많으며, 이동평균선을 이용한 추세의 기준을 사용할 경우 하락 추세에서 발생하는 패턴으로 인식하게 됩니다.
요기 참조!
코드 자체는 단순하니깐 복습하는셈 치고, 제가 왜 이런 코드를 사용하는지 살짝 설명하면서 넘어가죠~
candleBuy1 = close > open
일단 1번 조건. 양봉에서 사고 싶습니다. 양봉을 코드로 정의할 때에는 시가보다 고가가 높다 라는 점을 활용하면 됩니다. 또 암호 화폐에 한해서는, 이전 캔들보다 현 캔들의 종가가 높다 라는 식으로도 표현이 되죠~ (대부분의 차트에서 이전 캔들의 종가와 현 캔들의 시가는 일치하기 때문)
이제 캔들 몸통 및 꼬리 파트를 분해하여, 각각 장대 양봉이 발생하는 캔들의 특징을 정의해줍니다.
candlebody = abs(close - open)
먼저 캔들의 몸통에 대한 값을 절댓값으로 표현해줍니다. 캔들의 몸통의 크기를 나타내죠.
candlebodyaverageinput = input(20)
candlebodyaveragemultiple = input(2)
candlebodyaverage = ema(candlebody,20)*candlebodyaveragemultiple
그리고 캔들 몸통의 크기에 대한 평균값을 ema (지수 이동 평균) 함수를 이용하여 산출해냅니다. 이 부분 역시 필요하다면, 최적화를 해야하는 부분이기에, 인풋 처리 해줍니다. 그리고 캔들이 평균보다 과하게 큰 "이상점" (outlier) 을 찾아내야 하기에, 계수를 평균에 대한 계수를 붙여줍니다. 즉, 현재 캔들 몸통의 평균들보다 과하게 큰 넘들을 찾는 조작이죠.
candleBuy2 = candlebody > candlebodyaverage
이제 캔들 몸통 크기의 평균과 현재 캔들의 몸통 크기를 비교하여, 현재 캔들의 크기가 평균보다 월등히 클 경우에만 시그널이 발생하도록 표현해줍니다.
마지막으로, 캔들의 꼬리보다는 몸통이 커야 한다는 부분을 적어줍니다. 장대 양봉을 보통 우리가 볼 때, 몸통이 캔들에 비해 큰 캔들을 뜻 합니다. 똑같이 코드로 표현해줍시다.
wick = abs( (high - close) + (low - open) )
먼저 꼬리의 크기를 표현해주는 식을 적어줍니다. 이제 wick 이라는 변수에는 아랫 꼬리의 크기와, 윗 꼬리의 크기의 값을 더한 값을 표현하게 됩니다.
candleBuy3 = candlebody > wick
이제 꼬리보다 몸통이 크다 라는 부분을 작성해줍니다.
위 네 조건을 합치면 매수 시그널이 나옵니다.
Buy = candleBuy1 and candleBuy2 and candleBuy3 and trendMAcondition
청산의 기준: Moving Average
청산으로 사용할 이동평균선도 따로 추가해줍니다.
stopMAinput = input(20)
stopMA = sma(close,stopMAinput)
요롷게 적어줍니다.
Stop = close < stopMA
손절/익절시 상황을 정의하면, 종가가 이동평균선 보다 아래에서 마감될 때 임으로 종가가 이동평균선보다 아래에 있을 때 stop 이라는 시그널이 발생하게끔 적어줍니다.
전략 구성
if (Buy)
strategy.entry("long", strategy.long)
if (Stop)
strategy.close("long")
관찰
일단 최근 상승장의 영향으로 수익으로 나오긴 합니다. 최대 손실률은 30% 정도로 꽤나 가격방어를 잘한 것 같구요. 나머지 보조지표들을 가시화 하여 어디에서 진입하는지 확인해보겠습니다.
bgcolor(color = Buy ? #FF00FF : na, transp=85)
plot(trendMA)
plot(stopMA)
요롷게 표기해주면
이런식으로 매수 시그널이 발생하는 캔들에는 보라색 배경과, 두 이동평균선이 나옵니다.
먼저 보완을 해줘야한 부분은 항상 언급하는 부분이지만, 손절이 너무 많이 발생하고, 진입을 위한 캔들에 평균에 붙이는 계수를 더 높여줘 확실히 큰 캔들에서만 진입 하도록 2 가지 보완만 해주면 될 것 같습니다!
간단하게 요거 두 개 최적화하겠다는 뜻!
손절의 기준인 이동평균선 최적화
우와... 진짜 이쁜 값들이 나왔습니다. 손절이 짧을 수록 돈을 덜 벌다가, 길어짐에 따라 수익이 높아지고, 다시 내려가는 ... 모든 값들이 이렇게만 1피크로 나왔으면 ㅠㅠ
70주기 스펙
70 주기에 대한 스펙상태도 상당히 좋습니다. 최대 손실률이 24.93% 정도로, 현실적인 값 입니다.
승률이 27% 인점을 참고하면.. 아마 이걸 손매매 하신다면, 멘탈이 탈수기에 윙윙...
진입을 위한 조건 최적화
이제 캔들의 몸통을 평균값과 비교할 때 붙는 계수를 최적화 해보겠습니다. 진짜 크고, 의미있는 캔들에만 진입을 위하여!
데이터를 체계적으로 처리할 때 제가 사용하는 기법 중 한 가지를 새로 소개시켜드리겠습니다.
- 큰 값들을 비교적 널찍하게 넣는다.
- 의미있는 구간을 찾으면, 다시 작은 값들을 넣어 최적화 한다.
2 단계 로 구성되어 있는데, 어떤 구간의 값을 얼마나 잘게 잘라서 넣어야 할지 모를때 사용하는 기법 입니다. 이제 문제는 너무 잘게 자르거나, 너무 "과거" 데이터에 100% 맞는 계수를 찾을 경우 오히려 미래의 값에 적용이 안될 수도있습니다. 적당히 대부분의 상황에 잘 맞는 값을 찾아야 합니다.
큰 값 널찍하게
계수인 만큼, 조금만 넣어도 많이 변하게 됩니다. 0.5 단위로 넣어보겠습니다.
1.5~ 2.5 구간이 의미있어 보입니다.
범위 정하고 세세하게
1.5~ 2.5 구간을 0.1로 쪼개서 넣어줍니다.
이미 충분히 쪼개져서 그런지, 그닥 의미있는 값을 주진 않습니다. 보이는 정보로는 2.4 계수가 가장 좋아보입니다.
2.4 스펙
최대 손실률이 줄었습니다. 진입 횟수가 100회가 넘어 매우 만족스럽습니다. 하락장이였음에도 불구하고 수익률이 100% 이상 :)
전략 비교
이제 결과물을 과거 데이터랑 비교하는 시간입니다.
현실적으로 진입 횟수가 가장 많았다는 점이 가장 맘에 듭니다. 진입 횟수가 많으면 많을 수록 수수료도 많이 나가지만, 그만큼 검증되었다 라고 볼 수 있거든요!
수익률이나 손실률은 다른 전략에 비해서 월등하진 않습니다. 비교적 평범하면서 안전한 전략을 사용한다면, 전 이 전략을 사용할 것 같습니다! :)
평이한 전략인 만큼, 다른 코인들에 적용해도 사용 가능한 것으로 보입니다.
질문, 댓글, 팔로우는 감사합니다!
새로운 아이디어, 종목 추천 등은 언제나 환영입니다!