Aroon Oscillator (AO)의 개념
Aroon Oscillator (AO)는 추세의 강도와 방향을 측정하는 기술적 지표이다. 이 지표는 Tushar Chande에 의해 개발되었으며, Aroon Up과 Aroon Down이라는 두 가지 구성 요소를 가지고 있다.
Aroon Up은 최근 25일 동안 최고가를 기록한 날로부터 경과한 일수를 백분율로 나타낸 값이다. Aroon Down은 최근 25일 동안 최저가를 기록한 날로부터 경과한 일수를 백분율로 나타낸 값이다. 이 두 값은 다음과 같이 계산된다:
Aroon Up = (25 - 최고가 이후 경과일수) / 25 * 100
Aroon Down = (25 - 최저가 이후 경과일수) / 25 * 100
Aroon Oscillator는 Aroon Up에서 Aroon Down을 뺀 값으로 계산된다. 이 값의 범위는 -100에서 +100까지이다.
Aroon Oscillator = Aroon Up - Aroon Down
Aroon Oscillator가 0 이상이면 상승 추세를, 0 이하이면 하락 추세를 나타낸다. 또한, Aroon Oscillator가 0에 가까울수록 추세의 강도가 약하고, +100이나 -100에 가까울수록 추세의 강도가 강하다는 것을 나타낸다.
Aroon Oscillator를 활용한 트레이딩전략
Aroon Oscillator를 활용한 트레이딩전략은 다음과 같이 구성할 수 있다:
- Aroon Oscillator가 0 이상으로 전환되면 매수 신호로 간주한다.
- Aroon Oscillator가 0 이하로 전환되면 매도 신호로 간주한다.
- Aroon Oscillator의 절대값이 클수록 추세의 강도가 강하다는 것을 나타내므로, 절대값이 큰 경우에 매매 신호의 신뢰도가 높다고 판단할 수 있다.
- 추가적으로, 가격 차트와 Aroon Oscillator를 함께 분석하여 매매 타이밍을 결정할 수 있다. 예를 들어, Aroon Oscillator가 0 이상으로 전환되고 가격이 상승 추세를 보인다면 매수 신호로 간주할 수 있다.
이 전략은 Aroon Oscillator를 통해 추세의 강도와 방향을 파악하고, 이를 기반으로 매매 타이밍을 결정하는 것이 특징이다.
파이썬 코드 예시
다음은 FinanceDataReader 모듈을 사용하여 VOO ETF 데이터를 가져와 Aroon Oscillator를 계산하고, 이를 기반으로 매매 신호를 생성하는 파이썬 코드 예시이다.
먼저, 필요한 라이브러리를 가상환경에 설치한다:
python -m venv myenv
source myenv/bin/activate
pip install finance-datareader pandas numpy matplotlib
이제 코드를 실행할 수 있다:
import FinanceDataReader as fdr
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def calculate_aroon(data, period=25):
aroon_up = (period - data['High'].rolling(window=period).apply(lambda x: x.argmax())) / period * 100
aroon_down = (period - data['Low'].rolling(window=period).apply(lambda x: x.argmin())) / period * 100
aroon_osc = aroon_up - aroon_down
return aroon_osc
try:
# VOO ETF 데이터 가져오기
data = fdr.DataReader('VOO', data_source='yahoo')
# Aroon Oscillator 계산
data['AO'] = calculate_aroon(data)
# 매매 신호 생성
data['signal'] = np.where(data['AO'] > 0, 1, 0)
data['signal'] = np.where(data['AO'] < 0, -1, data['signal'])
# 수익률 계산
data['returns'] = data['Close'].pct_change()
data['strategy_returns'] = data['signal'].shift(1) * data['returns']
# 누적 수익률 계산
data['cumulative_returns'] = (1 + data['strategy_returns']).cumprod()
# 결과 출력
print(data.tail())
# 그래프 그리기
plt.figure(figsize=(12, 8))
plt.plot(data['cumulative_returns'])
plt.title('Aroon Oscillator Strategy Backtest')
plt.ylabel('Cumulative Returns')
plt.xlabel('Date')
plt.grid(True)
plt.show()
except Exception as e:
print(f"An error occurred: {e}")
이 코드는 FinanceDataReader 모듈을 사용하여 VOO ETF 데이터를 가져와 Aroon Oscillator를 계산한다. 그런 다음, Aroon Oscillator가 0 이상이면 매수 신호(+1), 0 이하이면 매도 신호(-1)를 생성한다. 이 신호를 기반으로 전략의 일간 수익률과 누적 수익률을 계산하고, 마지막으로 누적 수익률을 그래프로 그려 전략의 성과를 시각화한다.
또한, 코드는 try-except 블록으로 감싸져 있어 오류가 발생하면 오류 메시지를 출력한다. 이는 데이터를 가져오거나 계산하는 과정에서 발생할 수 있는 오류를 처리하기 위함이다.