MBY_LAB custom_top_html:no
default debug random = 0 / type = READ / detected = READ
2021-01-19 19:00:13

재미있는 퀀트 개발일지8

단축키

Prev이전 문서

Next다음 문서

크게 작게 댓글로 가기 위로 아래로

단축키

Prev이전 문서

Next다음 문서

크게 작게 댓글로 가기 위로 아래로

재미있느.png

재미있는 퀀트 개발일지 8편 입니다.

이번시간에는 8 편에이어 Type B, Type C에 대한 조건을 살펴보도록 하겠습니다.

1.jpeg

 

Type B

Type B는 확실한 추세가 나타나지 않는 구간으로, 보통 중기 (주봉)의 기술적 반등이 반복되는 구간으로, 장기 관점의 상승추세 전환으로 판단하여, 다수의 투자자들이 큰 손실을 보는 구간입니다.

이때에는 장기 이동평균선 그룹의 수렴과 발산을 상태변수로 삼기에는 단기적 변동성이 너무 크기 때문에 무리가 있다고 생각됩니다. 따라서, Type B와 비슷한 움직임이 나타날 경우에는, 단기 이동평균선 그룹의 수렴과 발산을 활용해 단기적 주가 흐름에 대응할 수 있습니다.

위 조건을 선언하기 위해서는, 장기 이동평균선 그룹에 대한 상태 정의가 수렴과 발산이 아닌 각 장기 이동평균선들이 서로 비슷한 위치에서 횡보하기 때문에, 이에 대한 정의가 필요합니다. (한마디로, 장기 이동평균선 횡보 중이니, 이 “횡보”상태를 파악할 수 있는 조건을 수립해야 한다…..)

따라서, 구상해 볼 수 있는 방법으로,

1) 총 3개로 분류한 타입 중 A (장기 이동평균선 그룹 데드 크로스)와 C (장기 이동평균선 골든 크로스)를 제외한 나머지 예외 조건 (else)를 타입 B로 정의하는 방법

2) 장기 이동평균선 그룹의 변화율이 줄어들어들었을 때 (횡보할 때) 단기 이동평균선으로 매수 / 매도 조건을 결정하는 방법

이 있습니다.

제 경험상 1의 경우 예외 변수와 노이즈 때문에 완벽히 검증된 매매로직이라 하기에는 다소 부족한 부분이 있어, 2번의 방법으로 진행해 보도록 하겠습니다.

그렇다면, 이제는 다수의 독자분들에게는 익숙하지 않은 “변화율”과 관련된 이야기를 해볼까 합니다.

개념설명 말고, 바로 ~~ 이렇게 하시면 됩니다. 하면 저도 편하지만, 저는 제 미디엄의 퀄리티를 먼저 생각하기에…

 

표준편차

변동성에 대한 이야기를 하기 위해서는 표준편차에 대한 개념을 짚고 넘어갈 필요가 있습니다. 표준편차에는 크게 1표준편차와 2표준편차가 있으며, 모두 특정 조건을 충족하는, 집합에서의 나타날 수 있는 변수의 “분산”에 기인된 개념입니다.

사전적으로 표현하는 “정규분포”를 이루고 있는 모집단에서 나타날 수 있는 변수는 1표준편차의 경우 68% 2표준편차의 경우 98%의 범위내에서 발생하며, 이외의 변수는 예상하지 못한 경우로 처리됩니다.

앞서 이 표준편차를 적용하기 위해서는, 모집단이 “정규분포”를 따라야한다는 필수조건이 있는데, 이를 테면 동전 10개를 던질 때 나오는 경우는 총 두가지로 1) 앞면, 2) 뒷면 으로 분류 될 수 있겠습니다. 만약 여기서 동전을 던졌을 때 옆면이 바닥에 닿으며 곶곶이 서 있다면, 이것은 예상하지 못했던 예외 변수가 되는 것 입니다.

이렇게 일반적으로 나타날 수 있는 변수가 정해져 있는 정규분포와 달리 시시각각 변하는 주가는 그 가격을 예측하기 쉽지 않습니다. (실제 체결되는 가격 또는 호가) 극단적인 예로, 누군가 공매도 포지션의 수익을 극대화 하기위해 가격하락을 유도하는 과정에서 발생하는 하한가 매도물량은 예측할 수 있는 변수가 아니기 때문입니다.

누군가 내일 주가는 5% 상승한 값이 될것이다. 라고 확정해 준다면, 얼마나 좋을까요? 실제로 그렇지 못하기 때문에 우리는 이러한 변수에 의존한 가격 예측 범위를 측정한 매매를 하는 것 일지도 모르겠습니다.

결론적으로, 주가는 정규분포를 따르지 않습니다.!!!

하지만, 일반적으로 “자산증식”이라는 원대한 목표앞에 모인 우리들이기에, 투자자들이 손해보는 장사는 하지 않을 것이라, 확신하고 이를 활용하는 것 입니다.

위의 내용을 토대로, 우리는 주가가 변화하는 68%, 또는 98% 범위를 설정해보겠습니다.

 

볼린저 밴드 (Bollinger Bands)

볼린저 밴드 모르는 투자자는 아마 없을 것 같습니다.

그런데, 개념을 제대로 이해한 사람 또한 얼마 없습니다. 그냥, 구글링해서 적혀 있는 사전적 용어만 읽어댈 뿐이죠. 하지만, 우리는 위의 단락에서 기본 개념부터 이해하고 넘어 왔습니다. 모든, 지표나 기타 데이터는 이렇게 개념정립이 선행되어야 한다고 생각합니다.

트레이딩 뷰에서 제공하는 파인스크립트로 작성된 볼린저 밴드는 아래와 같습니다.

//@version=4

study(shorttitle=”BB”, title=”Bollinger Bands”, overlay=true)

length = input(20, minval=1)

src = input(close, title=”Source”)

mult = input(2.0, minval=0.001, maxval=50)

basis = sma(src, length)

dev = mult * stdev(src, length)

upper = basis + dev

lower = basis — dev

plot(basis, color=color.red)

p1 = plot(upper, color=color.blue)

p2 = plot(lower, color=color.blue)

위의 코드를 통해 간단히 설명하자면, 우리가 흔히 알고 있는 볼린저 밴드는 “이동평균선”을 기준으로 2표준편차 범위 내에 주가가 형성될 수 있는 범위를 나타낸 것 입니다.

위에서 dev = mult * stdev(src, length) 코드에서 mult * stdev 가 바로 2 * 표준편차를 의미하는 것 입니다.

2.jpeg

실제로, 주가는 대부분의 경우 20일 동안의 평균 주가 움직임이 나타내는 2표준편차의 범위내에서 종가를 생성하였습니다.

여기서, 앞으로의 주가 흐름을 예측할 수 있고, 그 흐름을 통해 주가가 형성될 수 있는 범위를 미리 알 수 만 있다면, 참으로 큰 도움이 될 것이 분명합니다.

이 아이디어는 앞으로 진행하게 될 볼린저밴드를 이용한 퀀트 로직 일지에서 다루도록 하고, 이동평균선을 활용한 퀀트 이야기 에서는, 주가의 분포를 표현하는 볼린저 밴드의 넓이 (Bollinger Bands width)에 주목하겠습니다.

볼린저 밴드 넓이에 영향을 주는 것은 바로 기준이 되는 이동평균선 입니다. 이동평균선, 즉 일정 기간동안의 가격 평균이 “크게” 변경되면, 2표준편차를 곱한 볼린저 밴드의 상단 / 하단 값의 차이가 커지기 때문에, 그 넓이가 늘어나게 됩니다.

위의 개념을 조금 정리하여 표현해보자면, “가격 변동성이 커질 경우 볼린저 밴드 넓이가 커진다.” 반대로, “가격 변동성이 작을 경우 = 수렴 할 경우 = 주가가 방향성을 선택하는 시점에 도래 했을 경우" 볼린저 밴드 넓이는 “줄어든다.”

퀀트 개발일지 9 편에서 우리는 Type B의 판정을 장기 이동평균선 그룹의 변동성이 줄어드는 것으로 설정하고, 이를 볼린저 밴드 넓이를 활용해 필터링 하도록 하겠습니다.

5,126
TAG •

MBY_LAB님의 서명

MBY_LAB

마켓 프라이스를 데이터 알고리즘을 통해 디지털 자산 트레이딩 전략 정보를 제공하는 MBY_LAB입니다.

실시간 트레이딩 시그널 봇, 마켓 프라이스 데이터 통계 제공.

 

MBY_LAB Channel : 

Medium : 

Quant service : 

 

대표 : 정 순용

한경닷컴 컬럼리스트, 인베스팅 닷컴 코리아 애널리스트, 블록체인 미디어 노더, 티코노미 컬럼리스트

암호화폐 거래소 상장심사 담당, 프로젝트 백서 제작 등 암호화폐 시장 경력 4년차.

 

default debug random = 0 / type = READ / detected = READ

MBY_LAB

재미있는 퀀트 이야기

  1. 안녕하세요 엠비와이랩입니다.

        안녕하세요. 엠비와이랩입니다. 엠비와이랩은 17년도부터 트레이더 활동과 이후 인베스팅 닷컴 코리아, ...
    Date2021.01.19 Byid: MBY_LAB[레벨:3]MBY_LAB Reply0 Views11816 Votes1 file
    Read More
  2. 재미있는 퀀트 개발일지10

    안녕하세요! 이번시간에는 이동평균선의 수학적, 그리고 이론적 개념, 매매기법을 담은 “This is Moving Av...
    Date2021.01.19 Byid: MBY_LAB[레벨:3]MBY_LAB Reply0 Views12211 Votes0 file
    Read More
  3. 재미있는 퀀트 개발일지9

    이번 시간에는 직전 공유해드린 글에서 확인했던 볼린저 밴드의 넓이 (Bollinger Bands Width), “가격 변동...
    Date2021.01.19 Byid: MBY_LAB[레벨:3]MBY_LAB Reply0 Views11969 Votes0 file
    Read More
  4. 재미있는 퀀트 개발일지8

    재미있는 퀀트 개발일지 8편 입니다. 이번시간에는 8 편에이어 Type B, Type C에 대한 조건을 살펴보도록 ...
    Date2021.01.19 Byid: MBY_LAB[레벨:3]MBY_LAB Reply0 Views11758 Votes0 file
    Read More
  5. 재미있는 퀀트 개발일지7

    오늘은 투자 미팅을 두건이나 다녀온 후 집에서 맛있는 음식 행복하게 먹고 늦은 시간에 글을 적어봅니다. ...
    Date2021.01.19 Byid: MBY_LAB[레벨:3]MBY_LAB Reply0 Views11707 Votes0 file
    Read More
  6. 재미있는 퀀트 개발일지6

      안녕하세요. 오랜만에 글을 씁니다. 몇달만인지 기억도 가물가물하네요. 하지만 오늘부터, 이전에 쓰던 ...
    Date2021.01.19 Byid: MBY_LAB[레벨:3]MBY_LAB Reply0 Views11788 Votes0 file
    Read More
  7. 재미있는 퀀트 개발일지5

      퀀트 개발일지 5번째 시간입니다. 5번째 글까지 도입부에 해당하고 이번 글 부터 본문에 해당 하겠네요. ...
    Date2020.08.04 Byid: MBY_LAB[레벨:3]MBY_LAB Reply1 Views20384 Votes2 file
    Read More
  8. 재미있는 퀀트 개발일지4

      이번 글은 지난 시간 예고했던, 1) 주가가 과연 이동평균선으로 회귀할까? 에 대한 이야기와, 2) 간단한 ...
    Date2020.07.29 Byid: MBY_LAB[레벨:3]MBY_LAB Reply0 Views21209 Votes4 file
    Read More
  9. 재미있는 퀀트 개발일지 3

    시작하기 전에…제 게시글의 말투나 어조는 그때그때 달라질 수 있음을… 너그럽게 이해해주시면 감사하겠습...
    Date2020.07.27 Byid: MBY_LAB[레벨:3]MBY_LAB Reply0 Views21026 Votes3 file
    Read More
  10. 재미있는 퀀트 개발일지2

        이번 글에서는 직전 글에서 이야기하던, “매수/매도 트리거 발생 시, 시장가격에 매수하는 것과 지정가...
    Date2020.07.25 Byid: MBY_LAB[레벨:3]MBY_LAB Reply0 Views21054 Votes2 file
    Read More
  11. 재미있는 퀀트 개발일지 1

      이번 글에서는 앞서 예고한 바와 같이 시스템 트레이딩 로직에 따른 매수/매도 중 발생하는 매수 / 매도 ...
    Date2020.07.23 Byid: MBY_LAB[레벨:3]MBY_LAB Reply0 Views21446 Votes3 file
    Read More
  12. 안녕하세요! MBY_LAB입니다.

    안녕하세요. 마켓 프라이스 데이터를 통해 디지털 자산 알고리즘 트레이딩 서비스를 하는 MBY_LAB입니다. ...
    Date2020.07.23 Byid: MBY_LAB[레벨:3]MBY_LAB Reply1 Views20561 Votes4 file
    Read More
목록
Board Pagination Prev 1 Next
/ 1
default debug random = 0 / type = READ / detected = READ