Cybernetic Oscillator

Cybernetic Oscillator

The Cybernetic Oscillator is a zero-centered, energy-normalized momentum oscillator inspired by John Ehlers’ digital signal processing work. It combines a high-pass filter to remove drift, a 2nd-order Super Smoother to reduce noise, and RMS normalization so the amplitude remains comparable across markets and timeframes. The result is a responsive, clean oscillator that highlights direction changes and strength without being dominated by raw volatility.

Key Features at a Glance

  • Band-pass behavior: High-pass → Super Smoother low-pass chain isolates tradable swings.
  • RMS normalization: Divides by rolling RMS of the filtered signal to stabilize amplitude.
  • Zero-centered: Clear polarity around the 0-line for bias flips.
  • Threshold bands (±1 by default): Optional gating for “strong” moves.
  • Polarity coloring: Green above zero, red below, for instant read.

Intuition First: The Signal Pipeline

Price → remove trend with a 2nd-order High-Pass → reduce noise via 2nd-order Super Smoother → scale by RMS of recent energy → plot oscillator with zero line and ±thresholds.

  • The HP filter strips slow drift so momentum flips are timely.
  • The Super Smoother suppresses jitter without excessive lag.
  • RMS normalization keeps values consistent, making ±1 a meaningful, portable reference.

Formula Breakdown

  1. High-Pass (2nd order)
    • Frequency set by hpPeriod. Coefficients use expcos and π to emulate a digital HP.
    • Output: hp, removing low-frequency drift.
  2. Super Smoother (2nd order Low-Pass)
    • Frequency set by lpPeriod. Applied to the average of hp and hp[1] to reduce phase noise.
    • Output: lp, a smooth band-passed signal.
  3. RMS Normalization
    • Compute rolling RMS over rmsLen of lp².
    • Normalize: osc = lp / max(rms, ε) so amplitude ≈ 1 in steady conditions.
  4. Display & Thresholds
    • Plot osc, zero line, and optional ±threshold.
    • Dynamic color: green above zero, red below.

Inputs & Defaults

  • hpPeriod = 30
    Controls how aggressively drift is removed.

    • Shorter (15–25): faster bias flips, more whipsaws.
    • Longer (35–50): steadier bias, slower to turn.
  • lpPeriod = 20
    Governs smoothing of the high-pass output.

    • Shorter (10–16): snappier but noisier.
    • Longer (22–30): calmer but laggier.
  • rmsLen = 100
    Window for energy normalization.

    • Shorter (50–80): amplitude adapts quickly to volatility shifts.
    • Longer (120–200): more stable scaling across regimes.
  • threshold = 1
    Optional gating for “strong” moves.

    • Raise to 1.25–1.5 in choppy markets to reduce false positives.
    • Lower to 0.7–0.9 to be more permissive.

How to Read the Oscillator

  • Zero-line flips: Crossing above 0 suggests bullish momentum bias; below 0 suggests bearish.
  • Threshold zones: Moves beyond +threshold or below -threshold indicate stronger impulses.
  • Divergences: Price making new extremes while osc fails to confirm often precedes momentum fades.
  • Regime awareness: In strong trends, pullbacks may stall near the zero line; in ranges, price mean-reverts around zero more frequently.

Tip: Treat ±threshold as context, not absolute signals. Combine with trend/volatility filters.

Trading Playbooks (Examples, Not Advice)

  1. Momentum Flip
    • Entry: Bias flip through zero in trend direction (e.g., price above a slow MA, oscillator crosses > 0).
    • Exit: First loss of momentum back through zero or trail with ATR.
    • Use threshold: If the first push also clears +threshold, allow a wider stop; otherwise, be tighter.
  2. Pullback Continuation
    • Uptrend: After a dip above -threshold, look for osc to curl back up and cross zero.
    • Downtrend: Mirror logic with +threshold.
    • Idea: Avoid deeper counter-trend swings that pierce the opposite threshold.
  3. Range Mean-Reversion
    • In sideways regimes, fade moves that tag ±threshold when price is at range extremes.
    • Exit near the zero line or mid-range.

Risk management: Always define invalidation (e.g., ATR-based stops or swing points) and position sizing before entries.

Best Practices & Common Pitfalls

  • Don’t over-filter: Very long hpPeriod + lpPeriod can mute useful signals.
  • Keep RMS realistic: Too small rmsLen can inflate amplitude after brief shocks.
  • Mind regime shifts: Re-tune threshold when volatility regime changes.
  • Use confirmations: Pair zero-cross ideas with a simple regime filter (e.g., MA slope) and a volatility filter (e.g., ATR percentile) to decide whether to run momentum or mean-reversion playbooks.

Code (ProBuilder)

Share this

Risk disclosure:

No information on this site is investment advice or a solicitation to buy or sell any financial instrument. Past performance is not indicative of future results. Trading may expose you to risk of loss greater than your deposits and is only suitable for experienced investors who have sufficient financial means to bear such risk.

ProRealTime ITF files and other attachments : How to import ITF files into ProRealTime platform?

PRC is also on YouTube, subscribe to our channel for exclusive content and tutorials

  1. YvesRobert • 13 hours ago #

    Hello Ivan, I see that you are very good in PRT coding. Is it possible to have a code who searchs absorptions ? I think we have now the possibility to read volume exchange per price with PRT DOM but I don’t know if there are coding instructions for that.
    Thank you for your very good you work.

    • Iván • 8 hours ago #

      Hi. It is not possible to detect true absorptions with ProBuilder code. The PRT language does not provide access to order book (DOM) data or volume per price. Only bar volume and tick volume are available.

avatar
Register or

Likes

avatar avatar avatar
Related users ' posts
ggolfet Hi Actarus, what's the name of the histogram indicator below Apple's chart?
Actaru5 Flag ShowState in setting and show histogram
NicolaSilvagni hi, thank you for creating this indicator. i can't figure out how to get the three graphs b...
Nicolas Check your custom trading hours and use the default market ones.
fj_pastor Hello Nicolas, Thanks again for all your support. Finally I debugged the problem. The sim...
kallistos Hi Nicolas, Thank you very much indeed for this indicator (and all the others you are provi...
Morrissey38 Muchísimas gracias Nicolás , muy amable.
Bruno Carnazzi extrèmement pertinent
Bruno Carnazzi Is that beatable ?
Sapo Thank you for your indicators. As always it's perfect, I thank you for your help it's preci...
eivaremir have u got the trading view version?
carlvan That's a great indicator and I especially the use of colors, more or less pronounced to indi...
diegofe_2000 CORDIAL SALUDO. CUANDO REALIZO UN PROGRAMA CON ESTE INDICADOR ME SALE EL SIGUIENTE LETRE...
ALE Hello do you want to explain to me in more detail what you have to do? Please replay here:...
Nicolas Thanks again for all your valuable posts... and well formatted code! :)
Abdelkrim Maksour hi sir is this indicator for mt4 and how i can get one .
Nicolas Thanks a lot for this new valuable addition to our library. I changed line 76 with "barindex...
Horance Thanks. I've noticed this leftover after submission, but it was too late for editing. BTW, I...
Etienne Thanks Horance for porting this code to PRT. I would like to bring some speedup to your cod...
Horance This is a good question. John Ehlers explains it in Rocket Science for Traders. You have to ...
cbeukes Much appreciated, I will give that a try. Also, is there any criteria that one could use to ...
avatar
Anonymous Thanks for the code! I'm trying to understand how it works, and have a few questions... line...
Bebbo Grazie del prezioso contributo Nicolas, scusa la mia inesperienza, sono alle prime armi e s...
Nicolas To avoid recalculation, you should use the one from this post.
Bebbo Ok Grazie Nicolas.
Appsoluxions Hi Nicolas, do you have the MT4 version of the indicator? I am not sure if these kind of que...
Nicolas Hi, don't have one sorry. But you can still ask for private coding through our programming s...
Appsoluxions Cool. Thanks for the response.
Etienne Hi, thanks for proving this code. I would like to contribute by adding a computation speed...
Etienne //Compute Super Smoother coefficients once if barindex = 1 then a1 = exp( -1.414 * 3.14159...
Nicolas Thanks a lot!
Bard From the url link #post-65420 above but without the chart image: Stocks & Commodities...
Bard Note: lter = filter
Bard Apologies, there's been an issue with copying "f" and "I" from the article and pasting.. whi...
Maz
8 years ago
Francesco78 very nice, thanks!
Wilko Interesting! Thanks for sharing!
BjornH Extremely nice, thanks!

Top