빙구처럼 트레이딩: 코인 차트 "처음부터" 공부하기 #41- 이상한 보조지표 만들기 I (Moving Average)
맨날 진지하게 수익률 높이고 더 좋은 전략! 을 외치다가 쉬어가는 척, 지금 까지 배운 모든 것을 활용하여 실용성이 있을지 없을지 모르는 보조지표를 만들어 보겠습니다.
이상한 보조 지표 만들기 시리즈의 첫 번째 포스팅인 만큼... 최대한 실용적이게 만들어 볼 예정입니다.
예전부터 매번 강조하던, 변동성이 작을 때의 시장이 움직이는 패턴과 변동성이 클 때 시장이 움직이는 패턴이 다르다 라는 점을 활용해보려합니다.
지금까지는 변동성이 충분한 시장에서만 진입해라 라고 했다면, 지금은 변동성에 따라서 차트를 구분하고, 변동성에 따라 차트에 다른 값을 보여줘라! 라고 할겁니다.
아이디어
먼저 쉽게쉽게 그림으로 제 머리속에 뭐가 들었는지 보여드리지요. 거의 대부분의 전략을 구성할 때는 N 모양의 파동이 등장합니다. 상승 추세 또는 하락 추세를 뜻하는 파동인데요, 이제는 비추세 파동까지 포함 시켜 N 파동 + 비추세 파동 형식의 모형을 그려볼 겁니다.
그리고 기본적인 정의를, 추세 구간에서의 변동성은 크고, 비추세 구간에서의 변동성은 작다 라고 규칙을 정해버립니다.
규칙 정하는 이유는 모든 추세 구간이 변동성이 큰 것이 아니며, 모든 비추세 구간이 변동성이 작은 것이 아니여서, 100% 확실히 구분을 하려면 여러가지 아이디어를 함께 사용해야하기 때문입니다. 그리고 설사 많은 아이디어를 혼용하여 사용한다고 해도 단순화한 모델보다도 수익률이 떨어지는 상황이 나타납니다.
overfitting 문제점이라고 부르는데, 이건 나중에 100번째 포스팅 쯤에서 다뤄보도록 하겠습니다.
https://www.investopedia.com/terms/o/overfitting.asp 선행 학습 하실분!
이제 문제점은 비추세 구간에서와 추세 구간에서의 매매 위치가 다르다는 점 입니다.
추세 구간에서는 위와 같이 눌리면 사서, 고점에서 판다 라는 아이디어라면,
비추세 구간에서는 주어진 구간 안에서 사고 팔고를 반복해야합니다. 문제는 일반적인 트레이더의 경우에는 이런 비추세 "구간"을 잘못 설정하여 돈을 잃는 경우가 매우 빈번하게 발생하고, 저도 이런 구간안에서 진짜 소액이 아닌이상 진입을 하지 않습니다.
그래서 위 아이디어를 현실적인 보조지표를 활용하여 아이디어를 스케치해 본다면
추세 구간에 대해서는 이동평균선을 활용할 수 있으며, 수렴구간에서 이동평균선을 활용할 경우 어떻게 되는지 확인해보실 수 있습니다.
위 예시처럼 비추세 구간에서는 채널형식 또는 과매수/과매도 지표를 사용하여, 내려가면 매수, 올라가면 매도 형식의 매매를 취해야 합니다.
즉, 우리가 필요한 정보는 딱 이정도 입니다. 추세일 경우 추세 지표를, 비추세일 경우 비추세 지표를 보여줘라!
코딩
//@version=4
strategy("Awesome SteemCoinPan #20", overlay=true, default_qty_type=strategy.cash, default_qty_value=1000, initial_capital=1000, currency="USD")
일단 세팅 부터.
그리고 변동성에 대한 기준을 세워주고, 해당 변동성 이상인 구간과 이하인 구간을 구분해줍니다.
ATRlonginput = input(50)
ATRshortinput = input(5)
ATRhighvolatility = atr(ATRlonginput) < atr(ATRshortinput)
ATRlowvolatility = atr(ATRlonginput) > atr(ATRshortinput)
이런식으로 인풋 처리를 해주고 (최적화는 항상해줘야 하기에) 저변동성 구간과 고변동성 구간을 정의해줍니다.
MAinput = input(50)
MA = sma(close,MAinput)
그리고 고 변동성 구간에서 프린팅할 이동평균선을 정의해주고
Channelmultipleinput = input(2)
Channelhigh = sma(close,MAinput) + atr(ATRshortinput)Channelmultipleinput
Channellow = sma(close,MAinput) - atr(ATRshortinput)Channelmultipleinput
그리고 저 변동성 구간에서는 원시적인 켄트너 채널을 이동평균선으로 표현하여 그려볼 것 입니다.
trend = if(ATRhighvolatility)
MA
그리고 만약 ATR 에 대해 변동성이 높은 구간이라면 trend = MA 라는 구문을 써주고
plot(trend)
trend 를 그려줍니다.
저변동성 구간도 동일하게
notrendhigh = if(ATRlowvolatility)
Channelhigh
notrendlow = if(ATRlowvolatility)
Channellow
저변동성 구간일 경우 윗 벤드와 아랫 벤드를 정의해주고
plot(notrendhigh)
plot(notrendlow)
각 구간일 경우의 값을 프린팅해줍니다.
관찰하기
음..알아볼 수 없는 형체의 3 선을 그리고 있습니다. 일단 선을 점으로 표현하도록 바꿔보겠습니다.
plot(trend, style = cross)
plot(notrendhigh, style = cross)
plot(notrendlow, style = cross)
오케이 일단 뭘 말하려는지는 알 것 같습니다. 하지만 여전히 구간을 명확히 나누진 못하는 군요. 좀 더 민감하게 움직이도록 주기를 바꿔주겠습니다.
ATR 장기값을 20, 단기값을 3, MA 를 20으로 변경해봤습니다!
대충 뭔가 해석이 되면서도 안되면서도..? 너무 단순한 값으로 만들다보니깐 하하하ㅏㅎ
최적화나 어려운 것들은 다음 포스팅에서 하고, 일단 해석 가능 하도록, 눈에 보이게 외적인 수정을 해보겠습니다.
plot(trend, style = cross, color = red , linewidth = 3)
먼저 중심선은 빨간색으로, 다소 두껍게 그리도록!
plot(notrendhigh, style = cross, color = green, linewidth = 2 )
plot(notrendlow, style = cross, color = green, linewidth = 2)
채널로 나타나는 값은 초록색으로, 중앙선 보다는 덜 두껍게!
일단 눈에는 보입니다.
특정 구간에서는 정확히 보이는데, 특정 구간에서는 왔다갔다하면서 사용에 어려움을 줄 것으로 보입니다. 다음 시간에는 이런 구간을 어떻게 처리해야하는지, "이상한 보조지표" 를 한 단계 업그레이드 시켜보는 작업을 해보겠습니다!
질문, 댓글, 팔로우는 감사합니다!
새로운 아이디어, 종목 추천 등은 언제나 환영입니다!
안이상해요~ 신기신기해요!! ㅎㅎ 업그레이드와 성과도 궁금하네요~ ^^
허걱! 감사합니다!
저도 이런 형태의 지표는 처음 만들어봐서 이게 수익이 날지 안날지 모르겠네요 ㅋㅋㅋㅋㅋㅋ
아 신기합니다. 그런데 결국 지표는 후행지표인거죠? 이것으로 올라갈것이라는걸 예측하고 살구간을 정할수 있는건가요?
앗! 제가 진행하고 있는 모든 시리즈는 지표를 기반으로 사고, 지표를 기반으로 팔았을 때 수익을 얼마나 내는지를 알아보고 있어요!! :)
후행성이지만, 과거에 동일한 상황에서 진입했을때 어땠는가를 연구하여 통계적인 관점으로 접근하는 것이지요!
감사합니다~
파이쏜하고 정말 비슷해요. 거의 바로 적응할 수 있겠네요 ^^
하하핳하하핳하하하하하하.... 오늘도 작성해주신 코드를 째려보며 멘붕 중이옵니다 .... ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
코드를 째려보는 모습을 생각하니 웃겨요 ㅋㅋ
옆에서 말 몇 마디 들으면 쉽게 이해될텐데 안타깝네요 ^^
이게 쭉 읽어 내려가다가, 이 변수가 뭐였지? 하고 다시 올라가고 ㅋㅋㅋㅋㅋ 쭉 내려가다가 이 함수가 뭐였지? 하고 다시 올라가고 무한 반복 중 입니다 ㅋㅋㅋㅋㅋㅋㅋ