지금까지는 손절선을 올려 자동으로 청산되게끔, 손절의 역할과 수익 청산의 역할을 둘 다 하는 보조지표를 만들어 보았습니다. 이번에는 충분히 가격이 상승 했을 때 고점에서 청산하는 방법을 연구해보겠습니다.
대부분의 개인 트레이더 분들에게는 처음 보는 형태 겠지만, 기능적인 부분 에서는 손절을 위로 올리며 청산하는 방법보다는 오늘 소개시켜 드리는 방법이 더 익숙할 것 입니다.
이러한 방법이 지금까지 다룬 것이라면,
오늘 알아볼 청산 방법은 이러한 "고점" 에서 물량을 파는 방법을 소개시켜 드리겠습니다.
일단 진입을 위한 조건이 있어야 합니다. 간단하게 캔들 패턴을 사용해보겠습니다.
위에 포스팅 참조!
이제 익절하는 구간은 벤드로 표현하여, 벤드 위를 뚫었다 내려오면 수익 청산을 하는 방법으로 접근해보겠습니다.
아이디어를 그림으로 표현하면 이정도가 될 듯 합니다. 지금까지는 아랫 밴드를 이용하여 추세가 끝난 지점을 찾았다면, 이번에는 추세가 과도하게 연장되었을 때 최고점을 캐치하여 수익을 극대화 하는 테크닉을 사용하는 것 입니다!
highband2input = input(3.0)
highband2mainput = input(50)
highband2 = sma(close,highband2mainput) + atr(10)*(highband2input)
일단 윗밴드를 어디에사 설치할 것이냐를 결정하는 계수와 이동평균선에 사용될 주기를 인풋으로 만들어주고, 밴드를 수식화 해줍니다.
plot(highband2)
그리고 윗 밴드를 시각화 하여 어디에 진짜 추세가 끝나는 지점에 만들어 지는지 확인해줍니다.
관찰
이런식으로 윗밴드 위에서 가격이 놀다가, 다시 뚫고 내려오는 첫 번째 캔들에 익절하게 되는 시스템을 보여줍니다. 눈으로 보기에는 추세가 과하게 연장된 지점을 잡는 것 같지는 않습니다만, 나중에 최적화 할 때 따로 확인해보겠습니다.
아이디어 자체는 코드로 어느정도 표현해낸 것 같습니다. (뿌듯)
손절
모든 거래는 무조건 손절에 대한 기준점이 있어야 합니다. 99% 맞는 전략이여도 1% 때문에 망할 수 있거든요. 손절에 대한 부분도 위와 같이 밴드 처리를 해줍시다.
lowband2input = input(3.0)
lowband2mainput = input(50)
lowband2 = sma(close,lowband2mainput) - atr(10)*(lowband2input)
plot(lowband2)
이런식으로 하단 밴드도 만들어 줍니다. 익절선에 필요한 MA 값, 계수 값이 다를 수 있기에 다른 변수로 인풋 처리 해줍니다.
관찰
익절선은 초록색, 손절선은 빨간색으로 표현 했습니다.
진입 조건 정리
진입 조건 정리를 해보면,
- 캔들 시그널 발생
- 익절선 아래에서 발생
- 손절선 위에서 발생
세 가지 조건을 코딩해줘야 합니다.
CandleBuy = engulfingbuy or threecandle or Buy
일단 캔들 시그널을 하나로 묶어주고
BuySignal = CandleBuy and close < highband2 and close > lowband2
종가가 윗 밴드 아래에 있고, 아랫 밴드보다는 위에 있을 때를 코딩해줍니다.
bgcolor(color = BuySignal ? #FF00FF : na, transp=85)
확인은 중요하니깐 진입 시그널을 확인해봅시다.
관찰
일단 전략으로 구성하면 한 번 진입하면, 청산 될 때 까지 중첩 진입은 안하니깐. 중복 시그널들은 상관 없고. 일단 눈으로 보기에는 나쁘진 않은데, 과하게 많이 시그널이 뜨긴 합니다.
손절 코딩
Stop = close < lowband2
손절은 뭐 간단하게 종가가 아랫 밴드 아래에서 만들어 질 때 손절 하라는 변수를 정의해주고.
익절 코딩
TP = close[1] > highband2 and close < highband2
익절도 간단하게 이전 캔들의 종가가 윗 밴드 위에 있고, 현재 캔들의 종가가 윗 밴드 아래에 잇을 경우를 코딩 해줍니다.
익절 아이디어를 그림으로 표현하면 이런 형태가 되겠죠?
전략 구성
if (BuySignal)
strategy.entry("long", strategy.long)
if (Stop or TP)
strategy.close("long")
진입 시그널이 발생하면, 진입해라
Stop 또는 TP 가 발생하면 모든 포지션을 청산해라.
관찰
진입 횟수가 너~어무 많습니다. 수익률도 사실상 마이너스 입니다.
손절선만 이용하여 청산했을 때랑 비교하여, 비슷한 조건을 주었음에도 불구하고 수익이 나지 않는 모습을 보실 수 있습니다. 초보자 분들이 트레이딩을 배우실 때 지정가 매도를 걸어둠으로써 (현재 비트가 천만원이라면, 천2백만원에 매도 주문을 걸어두는 행위) 청산을 하시는 경우가 많은데, 코딩을 통하여 이러한 행위가 훨씬 어렵다는 것을 확인해보실 수 있습니다....
쉽게 쉽게 트레이딩을 합시다! :)
다음 시간에는 이 전략을 사용할 수 있게끔, 고치고, 분량의 여유가 있다면 최적화 까지 해보겠습니다!
중간에 익절 전에 진입 신호가 세네번 나오는 경우도 있던데, 이런 경우는 어떻게 처리되었나요? 그 처리에 따라 수익이 달라질 수도 있지 않을까요.
트레이딩뷰 Strategy 기능상, 포지션에 없을 경우 진입 시그널이 발생할 때에만 진입을 하고, 진입을 한 상태에서 매도 시그널이 나올 경우 포지션을 매도하게 됩니다! 엄밀하게 코딩하려면 매수 시그널과 매도 시그널을 교차하게 만들어야 하지만... 기능상으로 문제가 없어서 그냥 냅둔 상태로 돌리고 있습니다~