アローン指標(Aroon Indicator)は、1990年代にトゥシャール・チャンデ(Tushar Chande)によって開発されたテクニカル分析ツールであり、市場トレンドの変化を特定するために設計されています。特に、将来の価格の動きを予測し、資産価格における新たなトレンドの出現を察知するために使用されます。この指標は、価格の高値・安値が発生してからの経過時間を測定することで、トレンドの強さを判断します。

アローン指標は市場で素早く利益を捉える能力があるため、超短期取引戦略の中核を担うことも多くあります。トレンドを特定し、安定した取引成果を得るための数少ないテクニカル指標の一つです。

経験豊富な短期トレーダーであれば誰でも、資産価格が一定のレンジ内で変動しつつ、突発的な動きを見せることが多いと知っています。実際の上昇または下降の動きは、取引時間の中でごく一部にすぎません。

アローン指標の中心要素:アローンアップとアローンダウン

アローン指標の計算式は、価格がレンジ相場からトレンド相場へ移行するタイミングを予測できるように設計されています。これにより、トレーダーはロングまたはショートのエントリータイミングを判断できます。また、現在のトレンドが終了してレンジ相場に移行するサインとしても使われます。

チャート上では、アローンアップ(Aroon Up)とアローンダウン(Aroon Down)の2本の線で表示されます。

一般的には、25期間(25日)を使用し、値は0〜100の範囲を取ります。アローンアップが50を超えていれば、過去12.5日以内に新高値が記録されたことを意味します。

アローンダウンにも同様のロジックが適用され、値が50を超えると、過去12.5日以内に新安値が出現したことを示します。100に近い値は、非常に強いトレンドの存在を示唆します。

アローン指標の計算方法

アローン指標は、直近の高値または安値が何日前に発生したかをパーセンテージで表現します。

アローンアップの値が100に近い場合は、非常に強い上昇トレンドにあることを示しています。反対に、アローンダウンが100に近ければ、直近で新たな安値が記録されたばかりであることを示します。

アローンアップの計算式は以下のとおりです:

例)直近20日間で最高値が2日前にあった場合:

Aroon Up = (20 − 2) × 100 / 20 = 90

最高値が15日前であれば、値は25となります。新高値が現在に近ければ近いほど、アローンアップの値は高くなります。同時にアローンダウンの値が低ければ、上昇トレンドがより強く確認されます。

アローンの数値の読み方

アローン指標を読み取る際に注目すべき基準値は、0・50・100の3つです。

  • アローンアップ > 50 & アローンダウン < 50:上昇トレンドを示唆(新高値が新安値よりも頻繁に発生)
  • アローンアップ < 50 & アローンダウン > 50:下降トレンドを示唆

レンジ相場(もみ合い)の特定

市場がレンジ相場に入っていると考えられるのは、以下の2つのパターンです:

  1. アローンアップとアローンダウンの両方が50未満
  2. 両方の線が同時に下降傾向にある

これは、過去13日間に新高値・新安値が発生していないことを意味し、ラインが平行に推移している場合は、明確なトレンドのないレンジ相場であると判断されます。

新トレンド発生の兆候

新たなトレンドは通常、3つの段階を経て出現します:

  1. アローンアップがアローンダウンを上回る(新高値の頻度が上昇)
  2. アローンアップが50を超え、アローンダウンが50未満を維持
  3. アローンアップが100に達し、アローンダウンが30未満に留まることで確定シグナル
import requests
import pandas as pd

def get_stock_price(symbol):
    response = requests.get(url)
    data = response.json()
    return data["price"]

def calculate_aroon_indicator(prices, period=25):
    highs = prices.rolling(window=period).max()
    lows = prices.rolling(window=period).min()
    
    aroon_up = ((period - (prices - lows).idxmax()) / period) * 100
    aroon_down = ((period - (prices - highs).idxmin()) / period) * 100
    
    return aroon_up, aroon_down

if __name__ == "__main__":
    symbol = "AAPL"
    price = get_stock_price(symbol)
    print(f"Current price of {symbol}: ${price}")

    historical_prices = pd.DataFrame({"Price": [price]})

    aroon_up, aroon_down = calculate_aroon_indicator(historical_prices["Price"])
    print(f"Aroon Up: {aroon_up}%")
    print(f"Aroon Down: {aroon_down}%")