アルーン・オシレータ(Aroon Oscillator)

 

概要

アルーンは1995年にトゥーシャー・シャンデ氏によって開発されたアルーン・インディケータとアルーン・オシレータ、2つの指標指標からなるテクニカル指標で、 アルーンとはインドのサンクスリット語で「夜明けの光」の意味します。トレンドの始まりを夜明けに例えています。アルーン・オシレータはアルーン・インディケータが、上昇トレンドをアルーン・アップ、下落トレンドをアルーン・ダウンで判断していたものを図1のようにオシレータにすることで判断基準を簡単に見えるようにした指標です。

図1 アルーン・オシレータとアルーンインディケータの描画例
計算方法(n=5の場合の例)

アルーン・アップとアルーン・ダウンはある区間nの中で、直近の最高値あるいは最安値を記録した日からの日数を使った指標でした。アルーン・オシレータはアルーン・アップとアルーン・ダウンの差を取ったもので、アルーン・インディケータを分かりやすくした指標です。詳しくはアルーン・インディケータの項をご覧ください。

$$ アルーン・オシレータ = アルーン・アップ – アルーン・ダウン $$

アルーン(インディケータ、オシレータ共)で使用されるnの通常値は14日ですが、 n=5として計算をしてみましょう。

日数 終値  安値  高値  アルーン・アップ   アルーン・ダウン   アルーン・オシレータ 
1日目10009971057
2日目105010401074
3日目107010571073
4日目106010561082
5日目108010781101
6日目110010951155100.0%0.0%100.0上げトレンド発生
7日目115011121158100.0%0.0%80.0上げトレンド
8日目11201113113280.0%20.0%60.0上げトレンド
9日目11301094113460.0%0.0%60.0上げトレンド
10日目(最新)11001040111240.0%20.0%20.0トレンド終了
Pythonによる実装

必要なライブラリを読み込みます

!pip install mpl_finance #Collaboratoryに入っていないライブラリを読み込みます
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
import mpl_finance
import sys
import numpy as np
from datetime import datetime
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
import requests
import io

疑似データを読み込みます

#ファイルの読み込み
URL = "https://neulab.co.jp/wp-content/uploads/pseudo_data.csv" #csvファイルのURL

datafile = requests.get(URL)#ファイルの読み込み

#データフレームの作成
df_temp = pd.read_csv(io.BytesIO(datafile.content), header=0, index_col=0, parse_dates=True, encoding="UTF-8")

df = df_temp.loc[:,['Open','High','Low','Close']]
df.head()

アルーン・オシレータを計算します。前半はアルーン・インディケータと同様です

df['aroon_max'] = df['High'].rolling(14).max()
df['aroon_min'] = df['Low'].rolling(14).min()
    
df = df.fillna(-0.1)
df['up'] = 0
High = df['aroon_max'][0]
High_pre = 0
High_num = 0

df = df.fillna(-0.1)
df['down'] = 0
Low = df['aroon_min'][0]
Low_pre = 0
Low_num = 0

for index, item in df.iterrows():
  
    High = df.at[index, 'aroon_max']
    if High < 0:
        df.at[index, 'up'] = 0
    elif High < High_pre:
        High_num = 0
        df.at[index, 'up'] = High_num
    elif High > High_pre:
        High_num = 0
        df.at[index, 'up'] = High_num
    else:
        df.at[index, 'up'] = High_num  
        High_num = High_num + 1
    High_pre = High
        
for index, item in df.iterrows():
  
    Low = df.at[index, 'aroon_min']
    if Low < 0:
        df.at[index, 'down'] = 0
    elif Low > Low_pre:
        Low_num = 0
        df.at[index, 'down'] = Low_num
    elif Low < Low_pre:
        Low_num = 0
        df.at[index, 'down'] = Low_num
    else:
        df.at[index, 'down'] = Low_num  
        Low_num = Low_num + 1
    Low_pre = Low
  
df_aroon_up   = (14 - df['up'])/14 * 100
df_aroon_down = (14 - df['down'])/14 * 100

df_aroon_oscillator = df_aroon_up - df_aroon_down

Matplotを使った描画例です

canvas_color = '#fffafa'
line_color = '#c8ced1'
font_color = '#171510'
colorup = '#bf0000'
colordown = '#006fbf'

n_data = -100
data = df[n_data:]
ohlc = np.vstack((range(len(data)), data.T)).T

fig, (ax1, ax2, ax3) = plt.subplots(3, 1, gridspec_kw={'height_ratios': [10, 6, 6]}, sharex=True, figsize=(12,9))
fig.patch.set_facecolor(canvas_color)
ax1.patch.set_facecolor(canvas_color)
mpl_finance.candlestick_ohlc(ax1, ohlc, width=0.5, alpha=1, colorup=colorup, colordown=colordown)
ax2.patch.set_facecolor(canvas_color)
ax2.plot(range(len(data)), df_aroon_up.values[n_data:], color='red', ls='-', label='Up')
ax2.plot(range(len(data)), df_aroon_down.values[n_data:], color='blue', ls='-', label='Down')
ax3.patch.set_facecolor(canvas_color)
ax3.plot(range(len(data)), df_aroon_oscillator.values[n_data:], color='darkorange', ls='-', label='Aroon Oscillator')
ax1.grid()
ax2.grid()
ax3.grid()

#ロゴ読み込み
logoURL = "https://neulab.co.jp/wp-content/uploads/logo.png" #logoファイルのURL
img_c = plt.imread(logoURL)
imagebox = OffsetImage(img_c, zoom=0.020) #画像をimageboxにいれる。
imagebox.image.axes = ax1
im_sabo = AnnotationBbox(imagebox, (0, 9850), xybox=(0, 9950), xycoords="data", boxcoords="data", pad=0.3, frameon=False)

l1,l2 = ax2.get_legend_handles_labels()
ax2.legend(l1,l2, fontsize=14, edgecolor='none', facecolor=canvas_color)

ax1.add_artist(im_sabo)
ax1.set_ylabel("Price of Something", fontsize=22)
ax1.set_ylim(9000., 10000.)
ax1.yaxis.tick_right()
ax1.yaxis.set_label_coords(0, 0.5)
ax1.tick_params(labelsize=24, labelcolor=font_color, color=line_color)

ax1.spines['left'].set_linewidth(0)
ax1.spines['right'].set_linewidth(0)
ax1.spines['top'].set_linewidth(0)
ax1.spines['bottom'].set_linewidth(0)

ax2.yaxis.tick_right()
ax2.set_ylim([-5,105])
ax2.tick_params(labelsize=22, labelcolor=font_color, color=line_color)

ax2.spines['left'].set_color(line_color)
ax2.spines['right'].set_color(line_color)
ax2.spines['top'].set_color(line_color)
ax2.spines['bottom'].set_color(line_color)

ax3.yaxis.tick_right()
ax3.set_ylim([-100,100])
ax3.tick_params(labelsize=22, labelcolor=font_color, color=line_color)

ax3.spines['left'].set_color(line_color)
ax3.spines['right'].set_color(line_color)
ax3.spines['top'].set_color(line_color)
ax3.spines['bottom'].set_color(line_color)

xtick0 = 2
plt.xticks(range(xtick0,len(data),12), [x.strftime('%m/%d') for x in df_aroon_oscillator.index][xtick0::12])

plt.subplots_adjust(left=0.05, right=0.89, bottom=0.1, top=0.99)
plt.grid(which='major',color=line_color,linestyle='-')
plt.grid(which='minor',color=line_color,linestyle='-')

ax2.grid(linestyle='--', lw=1)
ax3.grid(linestyle='--', lw=1)
ax1.set_axisbelow(True)

fig.savefig('Aroon.png', facecolor=fig.get_facecolor(), edgecolor='none')

以上のコードをGoogle社の提供しているColaboratory上で公開しており、実際に動作させることができます。

リンク先はこちら

アルーン・オシレータを使った予想

図2がアルーン・インディケータとアルーン・オシレータを併用した予想例です。オシレータが正負に振れている場合にインディケータを使ってエントリーポイントを決めます。(代表的な点のみ図示しています。)

図2 アルーン・オシレータの予想例(代表点的な点)
注意点

アルーン・インディケータを併用すると信頼度が上がります。


※このHPページで紹介しているテクニカル指標を使った取引ルールや売買シグナルの見方は一般的な考え方に基づくものであり、利益の増加や損失の減少を保証するものではありません。ご自身の判断にてお取引いただきますようお願いいたします。


現在、ニューラボでは人工知能による取引アルゴリズムを開発中です。11月にリリース予定。乞うご期待!
自動取引にご興味を持たれましたら お問い合わせページよりお気軽にお問合せください。