Skip to content
Open RaamTrade

AcceleratorOscillator — Accelerator Oscillator

The Awesome Oscillator minus its own simple average: momentum’s acceleration rather than its level. Bill Williams’ argument is that acceleration turns before momentum does, so this changes sign earlier than AO.

Signature

AcceleratorOscillator(fast, slow, smooth, on=<source>)
Argument Type Required Notes
fast int Param or literal Yes AO fast window. Convention 5. Bounds 1–100.
slow int Param or literal Yes AO slow window. Convention 34. Bounds 2–200.
smooth int Param or literal Yes SMA of the AO. Convention 5. Bounds 1–100.
on= symbol No Source symbol. Defaults to the trade symbol. Reads high and low.

Formula

$$ \text{AC} = \text{AO} - \text{SMA}(\text{AO}, s), \quad \text{AO} = \text{SMA}(\text{mid}, f) - \text{SMA}(\text{mid}, l) $$

Warmup

slow + smooth bars; 0 until then.

Reading the value

ac.value
ac > 0
ac.crossed_above(0)

Example

class AccelEntry(Strategy):
"""Enter when acceleration turns positive with momentum already up."""
trade = Symbol()
sizing = FixedCapital()
def execute(self):
ac = AcceleratorOscillator(5, 34, 5, on=self.trade)
ao = AwesomeOscillator(5, 34, on=self.trade)
if ac.crossed_above(0) and ao.value > 0 and self.trade.is_flat:
self.buy(self.trade, reason="Accelerating")
if ac.crossed_below(0) and self.trade.is_long:
self.sell(self.trade, self.trade.position, reason="Decelerating")

Notes

  • Bill Williams, New Trading Dimensions (1998).
  • Proven by an assert-via-trade run on SPY daily (stayed within the bound implied by its own AO on every bar; zero alarm trades).
  • Earlier than AwesomeOscillator and correspondingly noisier — most useful as a confirmation rather than a trigger.