W

WquGuru·QuantLearn

MomentumBeginner

Awesome Oscillator

Technical momentum indicator measuring market momentum

Backtest Performance Analysis

Comparison testing shows Awesome Oscillator vs MACD performance characteristics and trade execution patterns.

Awesome Oscillator Trading Positions

Awesome Oscillator Trading Positions

Long and short position signals generated by both Saucer patterns and moving average crossovers, compared with MACD signals below.

Awesome Oscillator Values

Awesome Oscillator Values

Histogram showing AO values with red/green coloring based on Open vs Close prices, demonstrating momentum shifts.

Moving Average Components

Moving Average Components

5-period (fast) and 34-period (slow) moving averages of median prices showing crossover points for signal generation.

Portfolio Performance

Portfolio Performance

Asset value comparison between Awesome Oscillator and MACD strategies, showing relative performance and drawdown periods.

Driving Force Theory

Awesome Oscillator measures the driving force of the market by comparing recent momentum to older momentum using the Bill Williams methodology.

Uses 5-period and 34-period simple moving averages of median prices (High+Low)/2, not closing prices.

The oscillator = 5-period SMA - 34-period SMA of median prices, creating a more stable momentum reading.

Positive values indicate bullish momentum; negative values indicate bearish momentum.

The strategy incorporates advanced "Saucer" pattern recognition for early signal detection before traditional moving average crossovers.

Red and green bar coloring based on Open vs Close prices provides additional momentum confirmation.

Mathematical Foundation

1
Median Price Calculation

MPt=Hight+Lowt2MP_t = \frac{High_t + Low_t}{2}

Median price uses the average of High and Low prices instead of Close price for more stable momentum measurement.

2
Fast Simple Moving Average (5-period)

SMA5,t=15i=04MPtiSMA_{5,t} = \frac{1}{5} \sum_{i=0}^{4} MP_{t-i}

Short-term momentum using 5-period simple moving average of median prices.

3
Slow Simple Moving Average (34-period)

SMA34,t=134i=033MPtiSMA_{34,t} = \frac{1}{34} \sum_{i=0}^{33} MP_{t-i}

Long-term momentum using 34-period simple moving average of median prices.

4
Awesome Oscillator Value

AOt=SMA5,tSMA34,tAO_t = SMA_{5,t} - SMA_{34,t}

The core oscillator value representing the difference between fast and slow momentum.

5
Bar Color Determination

Colort={Greenif Opent<ClosetRedif Opent>ClosetColor_t = \begin{cases} Green & \text{if } Open_t < Close_t \\ Red & \text{if } Open_t > Close_t \end{cases}

Bar coloring based on intraday price action for momentum confirmation.

6
Saucer Pattern Conditions

Bearisht=(AOt1>AOt2)(AOt1<0)(AOt<0)(Colort2=Green)(Colort1=Green)(Colort=Red)\begin{align} Bearish_{t} &= (AO_{t-1} > AO_{t-2}) \land (AO_{t-1} < 0) \land (AO_t < 0) \\ &\quad \land (Color_{t-2} = Green) \land (Color_{t-1} = Green) \land (Color_t = Red) \end{align}

Mathematical conditions for bearish saucer pattern: two consecutive green bars followed by red bar below zero line.

Advanced Signal Generation Algorithm

The Awesome Oscillator uses sophisticated pattern recognition beyond simple moving average crossovers, including Saucer patterns for early signal detection.

Moving Average Calculation

python
def awesome_ma(signals):
    signals['awesome ma1'], signals['awesome ma2'] = 0, 0
    signals['awesome ma1'] = ((signals['High'] + signals['Low']) / 2).rolling(window=5).mean()
    signals['awesome ma2'] = ((signals['High'] + signals['Low']) / 2).rolling(window=34).mean()
    return signals

Calculates 5-period and 34-period simple moving averages of median prices (High+Low)/2 instead of closing prices for more stable momentum reading.

Saucer Pattern Recognition

python
# Bearish Saucer: AO below zero line
if (signals['Open'][i] > signals['Close'][i] and 
    signals['Open'][i-1] < signals['Close'][i-1] and 
    signals['Open'][i-2] < signals['Close'][i-2] and
    signals['awesome oscillator'][i-1] > signals['awesome oscillator'][i-2] and
    signals['awesome oscillator'][i-1] < 0 and 
    signals['awesome oscillator'][i] < 0):
    signals.at[i, 'awesome signals'] = 1

# Bullish Saucer: AO above zero line  
if (signals['Open'][i] < signals['Close'][i] and 
    signals['Open'][i-1] > signals['Close'][i-1] and 
    signals['Open'][i-2] > signals['Close'][i-2] and
    signals['awesome oscillator'][i-1] < signals['awesome oscillator'][i-2] and
    signals['awesome oscillator'][i-1] > 0 and
    signals['awesome oscillator'][i] > 0):
    signals.at[i, 'awesome signals'] = -1

Saucer patterns provide early signals before moving average crossovers. Bearish Saucer: two consecutive green bars followed by red bar below zero line. Bullish Saucer: opposite pattern above zero line.

Position Management with Duplicates Prevention

python
# Standard MA crossover signals with duplicate prevention
if signals['awesome ma1'][i] > signals['awesome ma2'][i]:
    signals.at[i, 'awesome signals'] = 1
    signals['cumsum'] = signals['awesome signals'].cumsum()
    if signals['cumsum'][i] > 1:
        signals.at[i, 'awesome signals'] = 0
        
if signals['awesome ma1'][i] < signals['awesome ma2'][i]:
    signals.at[i, 'awesome signals'] = -1
    signals['cumsum'] = signals['awesome signals'].cumsum()
    if signals['cumsum'][i] < 0:
        signals.at[i, 'awesome signals'] = 0

Prevents duplicate signals when already in position. Uses cumulative sum to track current position state and avoid overtrading.

Implementation Steps

  1. 1Calculate median price = (High + Low) / 2 for each period
  2. 2Compute 5-period SMA of median prices (fast line)
  3. 3Compute 34-period SMA of median prices (slow line)
  4. 4Calculate AO = Fast SMA - Slow SMA
  5. 5Check for Saucer patterns: two consecutive bars of same color followed by opposite color
  6. 6Verify Saucer conditions: AO below zero for bearish, above zero for bullish saucers
  7. 7Generate standard MA crossover signals if no early Saucer signal exists
  8. 8Use cumulative sum to prevent duplicate signals when already in position
  9. 9Apply bar coloring based on Open vs Close for visual momentum confirmation

Key Metrics

Zero line crossovers for major trend changes
Saucer pattern frequency and accuracy
Moving average crossover timing vs Saucer signal timing
Bar color momentum (red/green) confirmation rate
Oscillator divergence from price action
Average holding period and signal frequency

Risk Considerations

Lagging nature due to moving average basis, though Saucer patterns help provide earlier signals
False Saucer signals in choppy markets can lead to whipsaws
Strategy performs better in trending markets than ranging conditions
Requires confirmation from other indicators for higher accuracy
Less sophisticated mathematical foundation compared to MACD oscillator
Bar color changes (Open vs Close) can be noisy in volatile markets

Practice Implementation

Prerequisites

Mathematical Background

  • • Linear regression and OLS estimation
  • • Time series analysis (stationarity, unit roots)
  • • Hypothesis testing and p-values
  • • Basic econometrics (error correction models)

Technical Skills

  • • Python programming (pandas, numpy)
  • • Statistical libraries (statsmodels)
  • • Data visualization (matplotlib)
  • • Financial data handling (yfinance)

Complete Implementation

Access the full Python implementation from the original quantitative trading repository:

bash
# Complete pair trading implementation
git clone https://github.com/je-suis-tm/quant-trading.git
cd quant-trading
python "Pair trading backtest.py"
# Modify tickers and parameters for your own analysis

Learning Checkpoints

1

Understand Cointegration

Can you explain why two assets might be cointegrated and what breaks this relationship?

2

Interpret Statistical Tests

Practice reading ADF test results and understanding when to accept/reject cointegration.

3

Signal Generation

Implement Z-score calculations and understand threshold selection (±1σ vs ±2σ).

4

Risk Management

Understand position sizing, monitoring regime changes, and exit strategies.

Recommended Learning Path

Immediate Actions

  • Download and run the Python script
  • Test with different asset pairs
  • Experiment with threshold parameters

Advanced Studies

  • Learn Johansen cointegration test
  • Study Vector Error Correction Models
  • Explore multiple asset pair trading

Important Disclaimer

This strategy involves significant risk. Historical cointegration relationships can break permanently. Always use proper risk management, position sizing, and never risk more than you can afford to lose. Paper trade extensively before using real capital.

Quick Navigation