: 지난 번과 마찬가지로 학습 Data에 추가할 보조 지표를 알아볼 예정이다. 추후, 학습 Data에 추가할 지표들이 있을 수 있겠지만, 오늘 소개하는 것을 마지막으로 학습 Data에 대한 정리는 마무리하고자 한다.

 

사실 이쯤되니깐, "실제로 학습 Data에 추가적인 보조 지표를 넣었을 경우, 학습이 잘될까?" 라는 의문이 생긴다. 기본적으로 우리가 추출한 보조 지표는 실제로 가격에 대한 예측을 할 때, rule-base(조건식)로 많이 사용한다. 그리고, 단순히 현재 시점만의 정보를 가지고 가격을 예측하는 것 보다는, 보조 지표와 함께 판단을 내려야 정확도가 높은 것도 사실이다. 

 

최근 계속해서 보조 지표에 대해서만 설명을 했기 때문에, 우리들의 진짜 목적이 조금 잊혀졌을 수도 있겠지만, 주 목적은 "Policy Network를 잘 학습시키는 것"이다. 그리고, 일반적으로 사람이 직접 Data를 보고 어느 정도 분석을 할 수 있는 수준이라면, Data 자체만으로도 Insight를 도출할 수 있다는 의미이고, 이는 Neural Network의 학습에도 긍정적인 결과로 연결된다고 볼 수 있다.

 

이렇게 보조 지표를 학습 Data에 추가함으로써, 강화 학습의 성능 향상은 충분히 기대할 수 있고, 이 모든 과정은 Policy Network를 잘 학습시키 위한 목적이라고 보면 될 것 같다.

 

1. Stochastic Oscillator

: Stochastic Oscillator는 가장 많이 사용되는 모멘텀 보조 지표 중 하나로 추세의 변경점을 찾을 때, 유용하며 주로 횡보장이나 박스권에서 적중률이 높다. Stochastic Oscillator는 일정 기간 동안의 가격에 대한 최고가와 최저가 범위 내에서 현재 종가가 위치하고 있는 비율에 대한 지표이다. 만약 시장이 상승 추세에 있다면, 종가는 최고가에 근접하여 가격대가 형성될 것이고, 반대로 하락 추세에 있다면, 종가는 최저가에 근접하여 가격대가 형성될 것이라는 기본적인 이론이 포함되어 있다. 

 

또한, 당일을 포함하여 일정 기간 내의 최고가와 최저가에 대한 당일 종가의 비율이기 때문에, 이 값은 항상 0과 1 사이의 값을 지니게 된다. 그리고 가격과 거래량에 의존하지 않고, 오직 가격 추세에 대한 모멘텀을 나타내기 때문에 가격 추세를 예측하는데 상당히 유용한 보조 지표이다. 

 

일반적으로 이 값이 0.8(또는 80)보다 클 때는 과매수 구간, 0.2(또는 20) 미만일 때는 과매도 구간으로 간주하여 매수/매도에 대한 시점을 정하기도 한다. Stochastic Oscillator을 구하기 위해서는 시장에서 발생되는 Fake Signal을 평활화하는 단계를 거쳐야한다. 먼저, K Line과 D Line으로 구분되는 Stochastic Oscillator의 계산법을 살펴보면서 의미를 파악해보자.

 

Fast K = ( Current Close Price - The Lowest Price During N days ) / (The Lowest Price During N days - The Highest Price During N days )

Slow K = Fast D = ( Current Close Price - The Lowest Price During N days ) MA3 / (The Lowest Price During N days - The Highest Price During N days ) MA3

Slow D = Fast D MA3

 

K와 D는 모두 0~1사이의 값을 가지며, Fast K는 상대적으로 빠르게 반응하는 지표이며, Slow D로 갈 수록 평활화 단계가 진행되기 때문에 덜 민감한 추세선을 나타낸다. Stochastic Oscillator는 시장에 민감하게 반응하는 K Line과 시장 심리가 느리게 반영되는 D line에 대한 Convergence & Divergence를 나타내는 지표로 이해할 수 있다. K Line은 실시간에 가까운 주가 전환에 대한 변화를 확인할 수 있고, 주가 전환에 대한 Noise Signal을 제외한 D Line과 함께 보면서 "진짜 추세 전환"에 대해 가늠할 수 있다. 다음 그래프를 살펴보자.

위의 그래프는 가격 차트이며, 아래는 Fast K Line(파란색)과 Slow D Line(노란색)이다. 그리고, 빨간 선은 0.8 선을 의미하며, 파란 선은 0.2 선을 의미한다. 그리고 D Line이 K Line보다 느리게 반영되는 것도 확인할 수 있다. D Line이 K Line보다 반응이 느리지만, Noise가 많이 제거된 시장 심리에 대한 추세가 잘 반영되어 있기 때문에 가격 추세를 판단할 때, 좋은 기준이 될 수 있다.

 

Stochastic Oscillator에 대한 매수/매도 방법은 개인마다 다르지만, Rough하게 K Line과 D Line이 각각 0.8, 0.2 선에 근접해서 교차할 경우, 매수/매도를 했을 때, 위와 같은 결과를 살펴볼 수 있고, 실제로 수익이 꽤 발생하는 것을 확인할 수 있다. 물론 Stochastic Oscillator 지표만을 가지고 매수, 매도를 하기보다는 다른 보조 지표들과 함께 판단했을 때, 더 높은 적중률을 보여줄 수 있다. 그러나, 본인이 생각했을 때, Stochastic Oscillator는 Bollineger Band(볼린져 밴드)와 같이 강력한 보조 지표 중 하나라고 생각한다.

 

2. Commodity Channel Index (CCI)

: CCI(Commodity Channel Index)는 이름에서 알 수 있듯이, 처음에는 상품 가격에 대한 추세를 알아보기 위해 개발된 보조 지표이다. 이 후, 주식 가격에도 적용함으로써, 추세 변화에 대한 시점을 파악하기 위해 많이 사용되는 모멘텀 보조 지표로 자리 잡아왔다. 

 

CCI는 간단하게 보면, 현재 가격과 Moving Average(MA)에 대한 차이를 보는 지표이다. 일반적으로 현재 가격을 MA와 비교하여, MA보다 클 경우에는 현재 가격이 상승 추세에 대한 힘을 받고 있다고 판단하고, 반대로 MA보다 작을 경우에는 현재 가격이 하락 추세에 대해 힘이 눌리고 있다고 판단한다.

 

또한, 주식 가격이 MA보다 일정 범위 이상 벗어날 경우에는 과매수 또는 과매도 구간으로 간주하기도 하며, 매매 시점으로 활용하기도 한다. CCI에 대한 공식은 다음과 같다.

 

p(t) = (p.low(t) + p.high(t) + p.close(t) ) / 3

MA(p(t)) = p(t)의 Moving Average

MD(p(t)) = |p(t) - MA(p(t))|의 Moving Average

 

* CCI = (p(t) - MA(p(t))) / (0.015 * MD(p(t)))

 

위의 공식에서 분모에 0.015를 곱해준 이유는 CCI의 값을 +100 에서 -100 사이로 조정하기 위한 parameter이다. CCI +100보다 클 수도 있고, -100보다 작을 수도 있다. 그리고, 0.015 말고, 다른 값을 곱해줌으로써 CCI를 해당 가격의 추이에 알맞게 조정하기도 한다. 

 

위의 그래프(위키피디아)를 보면,  CCI는 가격이 증가함에도 -100에서 +100 사이를 움직이는 것을 확인할 수 있다. 또한, CCI 값이 +100선 보다 높거나, -100선 보다 낮을 때 각각 과매수, 과매도로 간주할 수 있다. 과매수는 실제 가격 추이에 비해 과도하게 매수가 이루어져 가격이 형성되었으며, 이는 곧 매도 우세로 이어져 가격의 하락을 암시한다고 볼 수 있다. 마찬가지로, 과매도는 실제 가격 추이에 비해 과하게 매도가 이루어졌기 때문에, 곧 가격 상승이 있을 것이라고 기대할 수 있다.

 

이를 학습 Data에 적용해보았다. 이번 전처리 Data에서 사용하는 학습 Data는 1시간 기준의 차트이기 때문에, 시장 심리를 어느 정도 반영하기 위해, 기간을 일 자(Day) 기준으로 계산할 때보다, 더 넓게 잡아 계산하였다. 그리고, 0.015 대신 다른 값으로 값을 조정하여 다음과 같은 CCI 차트를 구해보았다. 

CCI를 학습 Data에 추가하기 위해, CCI의 범위를 +1에서 -1 사이로 Scaling했다. 위의 CCI를 보면, 실제로 과매도, 과매수 구간을 기점으로 실제로 가격의 추세가 전환이 되는 것을 확인할 수 있다. CCI가 학습 Data에 포함됨으로써, Policy Network의 학습이 잘되길 기대해봐도 좋을 것 같다.

 

 

3. Disparity (이격도)

: Disparity(이격도)는 다른 보조 지표에 비해 계산식이나 개념이 무척 간단하다. 현재 가격과 이동평균선과의 괴리 정도를 보여주는 지표인데, 계산식은 다음과 같다.

 

Disparity = (Close Price / n days Moving Average) * 100

 

이격도가 100을 넘을 경우에는 현재 가격이 이동평균선에 비해 높다는 의미이므로, 현재 가격이 상승 추세에 있다는 의미이고, 반대로 100보다 작을 경우에는 하락 추세에 있다고 볼 수 있다. 너무 간단한 지표라서 많은 설명이 필요하지 않겠지만, 보통 이격도는 단기, 장기로 구분하여 함께 본다. 

 

위의 그래프는 단기(파란색), 장기(노란색) 이격도에 대한 그래프이며, 1로 Scaling한 그래프이다. 보통 기간이 긴 MA 같은 경우 반응이 느리기 때문에, 단기 매매를 할 경우에는 보다 짧은 기간을 적절하게 선택해서 매수&매도를 하는 것이 중요하다. 이격도를 활용하여 매매 시점을 잡을 경우, 보통 이격도가 1보다 클 경우(>1) 매도, 작을 경우(<1)에는 매수를 한다.

 

즉, 올랐을 때 팔고, 내렸을 때 사면 된다. 왜냐하면, 결국 가격은 상승과 하락이 있는 한, 이동평균선에 수렴하기 마련이기 때문이다. 하지만 대부분은 오를 때 사고, 내릴 때 팔기 마련이다.

 

이격도를 학습 Data에 추가하기에는 뭔가 애매한 부분이 있다. 단순한 계산식일 뿐더러, 이미 Moving Average는 학습 Data에 추가가 되어있기 때문이다. 아무래도, 이격도는 이번 학습 Data에서는 제외하는 방향으로 가야할 것 같다.

 

 

4. Bollinger Band (볼린져 밴드)

: Bollinger Band는 시장 가격 추세에 대한 전환점과 강도를 확인하는데 가장 많이 사용하는 보조 지표 중 하나이다. Bollinger Band에 대한 자세한 설명은 이미 많은 사람들이 적어놓았기 때문에 특징과 계산식만 간단하게 언급하고자 한다. Bollinger Band는 이동평균선을 기준으로, 동일 기간 이동평균선에 대한 Standard Deviation(표준편차)도 함께 구한다음, 2 sigma 수준에 해당하는 신뢰구간을 구한다. 우리는 이 신뢰 구간에 대한 하나의 띠를 Bollinger Band라고 부른다.

 

통계학을 공부한 사람은 알겠지만, 2 sigma는 95% 수준의 신뢰구간을 의미한다. (3 sigma는 99.7% 이다.) 예를 들어 2 sigma(95%)수준의 신뢰구간이라고 했을 때, 이것이 의미하는 바는 다음과 같다. 임의로 100 번의 이동평균을 산출했을 때, 실제로 신뢰구간에 들어오는 이동평균은 95개 정도이고, 나머지는 이 구간을 벗어난 값을 보일 것이라는 의미이다.

 

간단하게 요약하면, 실제 가격이 Bollinger Band 구간을 넘길 확률은 상당히 낮고, 이를 넘길 경우에는 추세의 급격한 변화가 발생했다고 간주할 수 있다는 것이다. 실제로 대부분의 주식 가격의 추세는 Bollinger Band 구간을 크게 벗어나지 않기 때문에 예측 범위를 설정할 수 있고, 이를 이동평균선과 함께 볼 경우에는 보다 높은 적중률을 기대할 수 있다. Bollinger Band의 계산식은 다음과 같다.

 

MA = n days Moving Average

sd = n Days Standard Deviation

Upper Bound = MA + 2 * sd

Lower Bound = MA - 2 * sd

 

위의 식에서 2를 곱한 것은 보통 2 sigma를 기준으로 보기 때문이다. 그리고 다음은 학습 Data에 적용해본 결과이다. 

빨간 동그라미를 친 부분은 Bollinger Band의 경계선을 넘어갔을 때의 가격 구간이다. 차트를 보면 실제로 대부분의 가격 추세는 Bollinger Band 안에서 움직이고 있으며, 경계선을 넘었을 경우에는 대부분 추세 전환이 일어나는 것을 확인할 수 있다. 물론 100% 정확한 보조 지표는 없지만, Bollinger Band는 가격의 추세 전환 및 시장 강도를 가늠하는데 강력한 보조 지표 중 하나라고 볼 수 있다. 

 

학습 Data에서는 Normalization을 진행한 가격에 대한 Bollinger Band의 Upper Bound, MA, Lower Bound를 추가할 예정이다. 

 

 

후... 이번 글을 마지막으로 전처리에 대한 부분은 마무리 지으려고 했지만, 아직 거래량과 관련된 보조 지표가 몇 개 남아있다. 글이 너무 길어지면 지루해질 수 있으므로, 다음 글에서는 정말로 마무리 짓고 본격적으로 강화 학습 모델을 건드려 보도록 하겠다.

 

+ Recent posts