파인스크립트 기본반
분류 예제

ID/NR4 [Indicator] - Range contraction 변동폭 축소 지표

페이지 정보

본문

오랜만에 systrader79님 블로그에 갔다가 재미있는 전략을 보게되어 지표로 만들어봤습니다.

https://stock79.tistory.com/366 


Range contraction, 직역하면 범위 수축인데요.

제가 이해한 핵심은 며칠간 주가의 변동폭이 점점 축소되면 곧 빵! 하고 튀어오를날이 멀지 않았다 이겁니다.


항상 그런것은 아니겠지만, 주가의 등락폭이 점점 축소된다면 반대로 언젠가는 등락폭이 점점 오르기도 할거라는 것이죠.

그래서, 변동폭이 축소되었을때 매수했다가 며칠간 추이를 보고 주가가 오르면 파는 전략을 실행해볼 수 있다라는 것입니다.

자세한 내용은 systrader79님의 블로그를 참고해주세요.


그 변동폭의 기준은 여러가지로 설정할 수 있는데, 여기에서는 ID/NR4라는 것으로 정의를 하고 있습니다.

ID는 inside day라 하여 오늘 캔들이 어제 캔들 범위 안에 있는 상태입니다.

NR4는 narrow range 4라 하여 오늘 캔들의 변동폭이 최근 4일간의 캔들의 변동폭 중 가장 작은 상태입니다.


8ac98712184b690f8b9b36dbb3a8a240_1590165038_62.png
14일 캔들(꼬리 포함)이 어제인 13일 캔들 범위 안에 들어가므로 14일은 ID입니다.


8ac98712184b690f8b9b36dbb3a8a240_1590165038_31.png
12일의 캔들을 포함한 4일간의 캔들 중에 12일의 캔들 길이(꼬리 포함)가 가장 짧음으로 12일은 NR4가 됩니다.


8ac98712184b690f8b9b36dbb3a8a240_1590165302_8.png

ID와 NR4가 동시에 만족한다면, ID/NR4가 되는 것입니다.

최근 4일간 변동폭이 가장 작고, 어제 움직인 범위 안에서 움직이는 상태가 되는 것이죠.


블로그에서는 당일 ID/NR4가 만족하면

다음날 가격이 전일 고가를 돌파할때 진입하고
목표가, 손절가는 적당히 잡아서 트레이딩 하라고 소개하고 있습니다.


목표가나 손절가를 설정하는 전략은 트레이딩 뷰에서 그리 신뢰성 있는 결과를 내주지 못하기 때문에 꺼려집니다.

그래도 일단 흥미가 생겨서 ID/NR4를 판단해주는 지표를 만들어봤습니다.



[지표]


8ac98712184b690f8b9b36dbb3a8a240_1590165728_5.png
지표는 단순히 오늘이 ID인지, NR4인지, ID/NR4인지를 알려주고 있습니다.

ID라면 오늘은 어제의 범위 안에서 움직였다.

즉, 어제 대비 큰 상승도 큰 하락도 아닌 재미없는 장이었다라고 볼 수 있겠죠.

NR4라면 최근 4일 중에 가장 움직임이 없었다라고 볼 수 있겠습니다.

이렇게 재미없는 움직임을 보였으니 이제는 오르던가 내리던가 움직임이 크게 나오지 않을까라는 기대를 해볼 수 있다는 것입니다.



[소스]


...중략 (로그인 하셔야 볼 수 있습니다.)...


NR4가 기본인듯하지만, NR6, NR10 등 다른 기간값을 쓸 수도 있습니다.

이동평균도 5이동평균, 20이동평균 이렇게 다르게 쓸 수 있는 것 처럼요.

그래서 NRX를 설정할 수 있도록 period값을 주었습니다.

여기에 최근 X일간의 변동폭을 기준으로 할것인지 넣어주면 그에따라 결과가 나올것입니다.


이를 활용한 전략의 결과도 궁금한데, 목표가와 손절가를 설정해야하면 좀 신뢰도에 문제가 있을것 같습니다.

봉단위 기준으로 전략을 세워보고, 괜찮은 성과가 나온다면 소개해보겠습니다.



[예스트레이더 검색]


7ede4e46ddfb0e2b5076507d0433b611_1590205718_22.png
 

...중략 (로그인 하셔야 볼 수 있습니다.)...

관련자료

김철호님의 댓글의 댓글

네, period가 4라고 해보죠.

for i=1 to period-1
은 i가 1부터 period-1(3)까지 반복된다는 뜻입니다.
그러면, for 문 아래에 있는 스크립트가 3번 돌아갑니다.
그리고, i 자리에 1, 2, 3이 각각 대입됩니다.

for문이 첫번째 실행되면, i가 1이죠. 그러면
nr := range < range[1] and (nr or 1==1)
이 문장이 실행됩니다. 이 문장이 끝나면 i가 하나 증가하고요. i가 2가 되겠죠. 그러면
nr := range < range[2] and (nr or 2==1)
이 문장이 실행됩니다. 이 문장이 끝나면 i가 하나 증가하고요. i가 3이 되겠죠. 그러면
nr := range < range[3] and (nr or 3==1)
이 문장이 실행됩니다. 이 문장에 끝나면 i가 4가 될텐데, i가 3까지만 실행하기로 했으므로 for문을 빠져나가서 그 다음으로 갑니다.
nr이죠. 이 nr은 narrowRange()함수의 반환 값으로 쓰입니다.
narrowRange()함수를 실행할때 우리가 도출하여 결과로 받아야할 값이 있죠. 우리가 필요한건 nr 값이므로 함수 마지막에 nr을 써준것입니다.

함수에 대해서 다뤄보는 것도 좋을것 같네요.
한번 생각해보겠습니다.
전체 25건 / 1페이지

+ 최근글


+ 새댓글


통계