Awesome Oscillator (AO)
Calculate the Awesome Oscillator (AO) for a given price series.
The Awesome Oscillator measures market momentum by comparing a short-term and a long-term Simple Moving Average of the median price (the midpoint of each period’s high and low, rather than the closing price). It was developed by Bill Williams as part of his broader “Trading Chaos” collection of momentum indicators.
The formula is as follows:
\[\text{Median Price} = (\text{High} + \text{Low}) / 2\] \[\text{AO} = \operatorname{SMA}(\text{Median Price},\; \text{short\_window}) - \operatorname{SMA}(\text{Median Price},\; \text{long\_window})\]Also known as: AO, Bill Williams Awesome Oscillator.
No programming experience? With the Finance Toolkit MCP server, AI assistants such as Claude and ChatGPT can calculate the Awesome Oscillator (AO) for you. Just ask in plain English.
Calculate the Awesome Oscillator (AO) in Python
The Awesome Oscillator (AO) is available in the Technicals module of the open-source Finance Toolkit. Install it with:
pip install financetoolkit -U
Then call get_awesome_oscillator as shown below.
from financetoolkit import Toolkit
toolkit = Toolkit(tickers=["AAPL", "MSFT"])
toolkit.technicals.get_awesome_oscillator()
Which returns:
| Date | AAPL | MSFT | Benchmark |
|---|---|---|---|
| 2022-12-16 | -3.5418 | 11.2131 | 2.3418 |
| 2022-12-19 | -4.8628 | 9.3716 | -0.5142 |
| 2022-12-20 | -7.3604 | 5.5371 | -5.2622 |
| 2022-12-21 | -8.7804 | 1.9144 | -8.5319 |
| 2022-12-22 | -9.8319 | -1.2635 | -11.0124 |
| 2022-12-23 | -10.5435 | -3.8732 | -11.8451 |
| 2022-12-27 | -10.9665 | -5.1579 | -11.8737 |
| 2022-12-28 | -11.2666 | -6.1431 | -11.8561 |
| 2022-12-29 | -12.1821 | -7.321 | -12.6508 |
| 2022-12-30 | -12.5038 | -7.2199 | -12.3585 |
Parameters
get_awesome_oscillator accepts the following parameters:
- period (str, optional): The time period to consider for historical data. Can be “daily”, “weekly”, “quarterly”, or “yearly”. Defaults to “daily”.
- close_column (str, optional): The column name for closing prices in the historical data. Defaults to “Adj Close”.
- short_window (int, optional): The number of periods for the short-term SMA of the median price. Defaults to 5.
- long_window (int, optional): The number of periods for the long-term SMA of the median price. Defaults to 34.
- rounding (int | None, optional): The number of decimals to round the results to. Defaults to 4.
- growth (bool, optional): Whether to calculate the growth of the AO. Defaults to False.
- lag (int | list[int], optional): The lag to use for the growth calculation.
- standardize (bool, optional): Whether to standardize (Z-Score) the result. When combined with growth=True, standardizes the growth values instead of the raw values. Defaults to False. Defaults to 1.
Related Momentum Indicators
The Technicals module page introduces the module, and the sidebar lists all of its functions.