빙구처럼 트레이딩: 코인 차트 "처음부터" 공부하기 #43- 이상한 보조지표 만들기 III (Moving Average)

in #sct5 years ago

정의해준 구간별로 보여주는 지표 값이 달라지는 "이상한" 보조지표를 이어서 발전된 모델로 만들어 보겠습니다!


복습

이전 두 포스팅을 통하여 현재 가격의 변동성에 따라 청산 선이 바뀌며, 변동성이 충분할때 진입을 하는 전략까지 만들어보았습니다. 진입시 변동성이 작아지면, 인위적으로 손절을 길게 잡음으로써 노이즈에 손절이 나가지 않고, 포지션을 유지할 수 있게끔 해주는 방법이죠.

수익률, 손실률, 진입 횟수 등 제가 따지는 모든 값들은 비교적 괜찮게 나왔습니다.


이 지표에서 가장 의미있게 보았던 값은, 이전의 보조지표들과 다른 수익 상승 분포를 가졌다는 점 입니다.

https://www.steemcoinpan.com/sct/@roostermine/39-ii-keltner-channel-volatility-stop

지금까지 대부분의 전략에서는 매수 에 대한 시그널에만 진입을 했기 때문에 위와 같이 비트코인이 횡보하면, 전략 수익률도 횡보하고, 하락을 하면 같이 하락을 하는 모습을 보여주었습니다.


하지만 이번에 제작을 해본 전략은 비트코인이 횡보를 하기 시작했을 때도 수익을 내다가, 일정 구간에서 "특정" 이유로 수익률이 급감을 하기 시작합니다.

오늘의 주요 주제이며, 위 급감하는 구간을 분석하여 어떠한 이유로 급격하게 손절을 많이 하는지 원인을 찾아본 후 해결책 까지 제시해보도록 하겠습니다.

해결책에는 지금까지 많이 해왔던 계수 최적화 부터 새로운 지표를 도입하여 일종의 필터를 추가하는 것과 같은 작업이 되겠죠?


일단 저희가 분석해야하는 구간을 시각화 해보았습니다. 약 30회 진입 부터 문제가 발생하기 시작하며, 정말 꾸준히 하락합니다.


List of Trades 를 눌러 30 회째에 날짜가 어디인지 찾아줍니다.


보니깐 34 번째 거래 부터 손절이 급격하게 발생합니다.


그리고 연속된 손실이 끝나는 지점은 위 그래프상 65 번째였으며, List of Trades 에서 자세히 보면 67 번째 정도라는 것을 알 수 있습니다. 날짜는 19년 1월 19일 이네요.



좀 더 내려보면 이런식으로 꾸준히 손절이 발생하죠. 2018년 7월 30일을 찾아가 어떤 차트 모양을 나타내고 있는지 관찰해줍니다.


밑에 Go to ... 를 눌러서!


18년 7월 30일을 찾아줍니다.


관찰

하락 세가 나타남에도 불구하고, 미세한 조정 구간에 상승세라고 해석하여 진입을 하고 손절을 반복하는 모습입니다.

변동성이 극도로 낮아 나타나는 현상이라고 생각이 듭니다.


크게 관찰

손실이 발생하는 모든 구간에 대하여 살펴보면, 하락 장에서 당연히 매수 입장으로 접근하면 손실이 나는 것이니 11월 중순 이후의 하락장에 대하여 대비를 할 필요는 없어보입니다.


즉, 7 월~ 11월 까지 발생하는 거래에 대하여 필터링 할 수 있는 무언가가 필요합니다.

  1. 이런 구간에서만 발생하는 값을 산출하는 지표로 필터링. (수익률을 방어하라!)
  2. 이런 구간에서 역으로 수익을 낼 수 있는 무언가를 추가함으로써 마이너스 구간을 최소화. (최선의 방어는 공격이다! )

두 가지로 방법을 생각해 볼 수 있습니다. 2 번 째 방법은 상당히 까다롭기에.. 최후의 방법으로 남겨두고


이런 구간에 진입을 하지 않는 쪽을 일단 첫 번재 목표로 잡아보겠습니다.


ATR 을 이용하여, 위 구간의 변동성을 측정해보면 40~ 100 정도의 값을 가진다는 점을 확인하실 수 있습니다.

이제 ATR 을 장기적으로 사용할 경우 문제가 발생하는 것이, ATR 은 절대값으로 표현을 해주기 때문에 현재 가격대비 ATR 로 따졌을 때 의미하는 변동성이 다를 수 있습니다.

음.. 예를 들면 비트가 만 달러에서 100불씩 움직이면 1% 움직인 것이지만, 천 달러에서 100불 움직이는 것은 10% 움직이는 것이죠. 여기서 ATR 은 퍼센트로 나타내지 않고, "100불 움직였어!" 라고 말해주는 것이기에 상대값으로 환산해주는 작업이 필요합니다.


상대적 ATR

아이디어는 간단합니다. 현재 ATR 에 현재 가격을 나눠주면 되죠. 이제 현재 가격을 어떤 값을 쓸 것이냐가 문제가 되는데, 위 지표상에서 20 주기 ATR 을 사용하기에 20주기 ATR 을 20 주기 SMA 로 나눠 주도록 하겠습니다.


ATRinput = input(20)
Relative = atr(ATRinput) / sma(close, ATRinput)
plot(Relative)

코드는 간단합니다. 인풋 값을 정의해주고, 상대 값을 변수로 지정해주고 ATR 을 평균 값으로 나눠줍니다.

그리고 상대값을 그려주면 끝..


이런식으로 현재 가격에 비례한 상대적 변동성을 표현할 수 있게 됩니다. 지표를 볼 것은 아니지만 평균적으로 어떤 상대 변동값이 나와야 하는지를 알아보기 위하여 스케일에 100 을 곱해서 퍼센트로 변환해줍니다.

ATRinput = input(20)
Relative = atr(ATRinput) / sma(close, ATRinput) *100
plot(Relative)


그리고 그 위에 1% , 2% , 3% 구간에 선을 그어 어느정도 움직이면 많이 움직이는 것 인지 표기해줍니다.


1%를 기준으로 삼으면 그 아래에서 너무 많은 값들을 필터링 하게 됩니다.


1% 이하인 값은 추세적인 상황에도 나타나는 것이 관찰 되어 0.5로 하향 조절하여 다시 관찰해줍니다. 사용해도 괜찮아 보입니다. 이제 본 지표로 돌아와서, 0.5% 상대 변동값 아래에서 발생하는 모든 값을은 제거해줍니다.


그래서... 컨디션을 추가 했더니... 이런? 오히려 수익률이 더 안나오는 군요... 변동성이 문제가 아니였나봅니다.


그럼 두 번째 원인이였던 하락장에서 진입 하는 것을 막아봅시다. 간단하게 추세에 대한 조건절을 붙여주면되죠!

trendlong = sma(close,200)
trendcondition = close > trendlong

장기 추세를 추가해주고, 종가가 장기 추세선 위에 있을 때에만 진입 하도록!


오호 훨씬 이뻐졌습니다.

역시 추세가 답인 것 같습니다 ㅎㅎ....


추세와 상대 변동값을 둘 다 넣으면, 이와 같은 값이 나오게 됩니다. 추세만 넣었을 때가 더 높은 수익을 내게 되는 것이죠. 힘들게 변동성을 상대값으로 변환 했으나, 결과가 별로라고 하니 과감하게 버려줍니다. ㅠㅠ


수익률 분포 부분에서는 초기 버전과 비슷하게 유지되면서, 손실 구간을 줄여 수익률을 극대화 하였습니다!

다른 차트에도 적용해본 결과 모든 차트에 적용이 가능한 지표 라는 점 또한 확인 되었습니다! (가장 좋은 모델 이라는 뜻!)

다음 시간에는 계수/변수 최적화를 통하여 수익률을 어디까지 올릴 수 있는지 알아보도록 하겠습니다!


질문, 댓글, 팔로우는 감사합니다!

새로운 아이디어, 종목 추천 등은 언제나 환영입니다!


Sort:  

힘들게 변동성을 상대값으로 변환 했으나, 결과가 별로라고 하니 과감하게 버려줍니다. ㅠㅠ

토닥토닥~
상대적 변동성은 다른 어디에선가 또 쓸 데가 있을거에요.

ㅎㅎ 맨첨에 변환하고 왠지 느낌이 좋았는데 결과는 별로였네요 ㅋㅋㅋㅋㅋ 생각을 좀 해보고 있는데 표준 편차와 활용해서 뭘 할 수 있을 것 같아요~

Posted using Partiko iOS