인프런 커뮤니티 질문&답변

bear.park1220님의 프로필 이미지
bear.park1220

작성한 질문수

파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part2

4.5 Exponential Weight Moving Average(지수가중평균, EWMA)

지수이동평균의 alpha 값에 문의가 있습니다.

작성

·

596

0

안녕하세요. 만들어 주신 강의 정말 감사히 잘 수강하고 있습니다. 너무 이론적인 질문이 아닌가 싶기는 하지만, df.ewm()에 들어가는 alpha  값에 관하여 문의가 있어서 글을 남깁니다. alpha값 산정의 기준은 어떤게 있을까요? 혹시 이동평균화할 구간에 맞춰서 변동을 하나요? 밑에 질문이 좀 장황해졌는데, 아무래도 진행해본 과정을 자세히 알려드리는게 나을것 같아서 좀 많이 적었습니다.

 

현재 수강을 하면서 추가적으로 기술적 지표 코딩을 연습하는데, 이 교재에서는 numpy array를 이용하여 for 문등 원초적인? 코딩을 따라하며 익히고 있습니다. Pandas DataFrame을 이용해 하면 좋지 않나 싶지만, 저자가 옛날 스타일의 코딩을 좋아하는것인지 모르겠지만, 일단 따라서 연습하고 있습니다.

 

다시 질문으로 돌아가, alpha 값에 관하여 궁금한 점이 있습니다.  강의중에 alpha 값을 0.8을 쓰시기도, 0.2를 쓰시기도 하셔서, 어떤 값이 더 적합한지 찾아보았습니다. 최근에 개인적으로 ema 함수로 사용하는 과정들이 많아졌는데, 혹시 잘못되면 문제일것 같아서, 찾아보았습니다.

 

아래 링크에 있는 Investopia의 설명에서는 2/(이평하고자하는 n갯수 +1)의 값이 alpha에 들어간다고 나옵니다. 수학적인 증명의 과정은 정확히 모르겠습니다.

 

그래서 연산되어 나오는 값을 비교해 보았습니다.

 

현재 제가 연습한 코딩은 아래와 같습니다.

def ema(Data, alpha, lookback, what, where):

    alpha = alpha / (lookback + 1.0)

    beta  = 1 - alpha

        # First value is a simple SMA

    Data = ma(Data, lookback, what, where)

    # Calculating first EMA

    Data[lookback + 1, where] = (Data[lookback + 1, what] * alpha) + (Data[lookback, where] * beta)

    # Calculating the rest of EMA

    for i in range(lookback + 2, len(Data)):

        try:

            Data[i, where] = (Data[i, what] * alpha) + (Data[i - 1, where] * beta)

                except IndexError:

            pass

    # Cleaning

    Data = jump(Data, lookback) # lookback 구간동안 새로생긴 칼럼의 값은 nan 이라서 삭제한다.

    return Data 

 

여기에서 5일 지수이평을 구한다고 값을 내어보고,

ema(Data, alpha, lookback, what, where)에서는 alpha에 2, lookback에는 5를 입력하였습니다.

 

Pandas에 들어가있는 오브젝트인 ewm를 이용해 계산을 해보았습니다. 아래와 같이 0.333을 입력하여야 근사한 값이 나오는것 같습니다.

2/(20+1)로 0.333333를 계산한 것입니다.

pd.DataFrame(dfe).iloc[:,1].ewm(alpha = 0.3333).mean()

 

이미 지수이평의 값은 단순이평보다 반응이 빠르기에 어떤 값을 넣어도 문제가 없다고 생각하는 분들도 계시겠지만, 그래도 확실히 알아보는게 나을것 같아서 문의 드립니다.

 

새해 복 많이 받으시고, 감사합니다.

 

 

출처:

How Is Exponential Moving Average (EMA) Calculated? (investopedia.com)

 

답변 2

0

bear.park1220님의 프로필 이미지
bear.park1220
질문자

안녕하세요.

설명해주신 내용 충분히 답변이 되었습니다. 

 

일정한 alpha 값이 들어가는게 아니라, 최종 metric에 연계해서 판단하고 있다는 관점을  알게되는 것만으로도 충분히 만족할만한 좋은 답변을 해주신것 같습니다.

 

친절한 설명과 좋은 강의 감사드리며, 새해 복 많이 받으세요.

0

DeepingSauce님의 프로필 이미지
DeepingSauce
지식공유자

안녕하세요.

우선 질문하신 내용, "alpha값 산정의 기준은 어떤게 있을까요?"에 대해 솔직하게 답변을 드리면, 저는 heuristic하게 설정을 하는 편입니다.

사실상 최적의 alpha값을 찾는 것은, 기본적으로 값의 시간에 따른 변동성을 얼마나 빠르게 catch할 것인지, 과거/미래를 각각 어느정도 반영할지가 기본적인 기준이 되겠지만, 그 값이 상황, problem에 따라 너무 다르기에 best alpha를 찾는 것은 거의 불가능하다고 생각합니다.

저 같은 경우는 결과로 산출된 moving avg값을 backtesting의 투자 지표 or feature로 사용했을 때, 최종적으로 나오는 결과(backtestig metric. 예를들면 sharpe ratio 등)가 어느 정도 일관성 나오는지(time walk-forward backtesting을 통해), 아니면 단순하게 maximum 결과로 잘 이어지는지 등으로 판단합니다. 즉, moving avg 세계내에서만 alpha의 최적값을 판단할 수 없으므로, 결국 시스템의 최종 output or metric과 연계해서 판단하고 있습니다.

답변이 되셨을지는 잘 모르겠네요 ㅠ  수학적으로 깊은 의미가 더 있을듯하지만, 저는 이정도로만 사용하고 있어서 더 깊은 답변 드리기가 어렵네요 ㅠ

감사합니다!

bear.park1220님의 프로필 이미지
bear.park1220

작성한 질문수

질문하기