[blackcat] L2 Ehlers Predictive Average

Level: 2


John F. Ehlers introuced Predictive Average in his "Rocket Science for Traders" chapter 20 on 2001.


The concept of taking a difference of lagging line from the original function to produce a leading function suggests extending the concept to moving averages. There is no direct theory for this, but it seems to work pretty well. If taking a 7-bar WMA of prices, that average lags the prices by 2 bars. If taking a 7-bar WMA of the first average, this second average is delayed another 2 bars. If taking the difference between the two averages and add that difference to the first average, the result should be a smoothed line of the original price function with no lag. Sure, Dr . Ehlers tried to use more lag for the second moving average, which
should produce a better predictive curve. However, remember the lesson of Chapter 3 of the book. An analysis curve cannot precede an event. You cannot predict an event before it occurs. If then taking a 4-bar WMA of the smoothed line to create a 1-bar lag, this lagging line becomes a signal when the lines cross. This is as close to an ideal indicator as we can get.

Key Signal

Predict ---> moving average fast line
Trigger ---> moving average slow line

Pros and Cons

100% John F. Ehlers definition translation of original work, even variable names are the same. This help readers who would like to use pine to read his book. If you had read his works, then you will be quite familiar with my code style.


The 17th script for Blackcat1402 John F. Ehlers Week publication.


In real life, I am a prolific inventor. I have successfully applied for more than 60 international and regional patents in the past 12 years. But in the past two years or so, I have tried to transfer my creativity to the development of trading strategies. Tradingview is the ideal platform for me. I am selecting and contributing some of the hundreds of scripts to publish in Tradingview community. Welcome everyone to interact with me to discuss these interesting pine scripts.

The scripts posted are categorized into 5 levels according to my efforts or manhours put into these works.

Level 1 : interesting script snippets or distinctive improvement from classic indicators or strategy. Level 1 scripts can usually appear in more complex indicators as a function module or element.

Level 2 : composite indicator/strategy. By selecting or combining several independent or dependent functions or sub indicators in proper way, the composite script exhibits a resonance phenomenon which can filter out noise or fake trading signal to enhance trading confidence level.

Level 3 : comprehensive indicator/strategy. They are simple trading systems based on my strategies. They are commonly containing several or all of entry signal, close signal, stop loss, take profit, re-entry, risk management, and position sizing techniques. Even some interesting fundamental and mass psychological aspects are incorporated.

Level 4 : script snippets or functions that do not disclose source code. Interesting element that can reveal market laws and work as raw material for indicators and strategies. If you find Level 1~2 scripts are helpful, Level 4 is a private version that took me far more efforts to develop.

Level 5 : indicator/strategy that do not disclose source code. private version of Level 3 script with my accumulated script processing skills or a large number of custom functions. I had a private function library built in past two years. Level 5 scripts use many of them to achieve private trading strategy.
Versionshinweise: Correct label bar_index issue
Versionshinweise: Correct a display error
Open-source Skript

Ganz im Sinne von TradingView hat der Autor dieses Skripts es als Open-Source veröffentlicht, damit Trader es verstehen und überprüfen können. Ein Hoch auf den Autor! Sie können es kostenlos verwenden, aber die Wiederverwendung dieses Codes in einer Publikation unterliegt den Hausregeln. Sie können das Skript den Favoriten hinzufügen, um es auf dem Chart zu verwenden.

Möchten Sie dieses Skript auf einem Chart verwenden?
"Win$ & Donate w/ This" Address:
BTC: 1GeuxGE6UUato7AgMnNUjSg56mSzQ6Wxxk
USDT ERC20: 0xfd4d0eb131e81f44530849c1a966cb261dd6bda2
ETH: 0xfd4d0eb131e81f44530849c1a966cb261dd6bda2
LINK: 0xfd4d0eb131e81f44530849


Just found your page, thanks for all these cool indicators. This is the first one I've tried as the picture looks amazing! But it's too good to be true. I'm sure this is still a good indicator, but the buy and sell icons don't accurately represent the crossover and where you would actually buy or sell. So why include them?

Making a strategy with the indicator, the actual entry is far later than the repainted entry given by the indicator.
+2 Antworten
blackcat1402 pureshred
@pureshred, could you explain more why you find they are more lagged than it displayed? I cannot catch your meaning. Which reference you are comparing with? It could be good you hint any potential root cause of the lag you observed.
+1 Antworten
pureshred blackcat1402
@blackcat1402, Sure! So I simply made the indicator into a basic strategy, buying and selling on crossings of the two lines ("trigger" and "predict" in the script). The strategy enters as soon as the candle closes after a line cross. Meaning the strategy entry labels accurately show exactly when the crosses happen.

The buy and sell labels from the indicator also show when the lines cross. So it would only make sense for the indicator buy and sell labels and the strategy buy and sell labels to be in the same position on the chart, right? Because they both show the same thing.

But as you can see in the picture in my above comment, the indicator labels are two candles behind the strategy labels. They both get added to the chart at the same time, but the indicator labels get added two bars back. So when you go back and look at the chart, it makes it look like you would have gotten the signal much earlier than you actually do. It's simply repainting. No problems with the indicator, just the label.

on line 34 and line 36 remove the -1 from bar_index-1 for an adequate fix. Or bar_index+1 to match the strategy label position.
+1 Antworten
blackcat1402 pureshred
@pureshred, i know what the problem. it is not related to the script but related to TV strategy. TV strategy by default will place order on next bar...

TradingView uses a broker emulator when running strategies. Unlike in real trading, the emulator only fills orders at chart prices, which is why an order can only be filled on the next tick in forwardtesting and on the next bar or later in backtesting, i.e., after the strategy calculates.

The following logic is used to emulate order fills:

If the bar’s high is closer to bar’s open than the bar’s low, the broker emulator assumes that intrabar price was moving this way: open → high → low → close.
If the bar’s low is closer to bar’s open than the bar’s high, the broker emulator assumes that intrabar price was moving this way: open → low → high → close.
The broker emulator assumes that there are no gaps inside bars, meaning the full range of intrabar prices is available for order execution.
Even if the Recalculate On Every Tick option is enabled in strategy properties (or the script’s strategy call uses calc_on_every_tick=true), the broker emulator’s behavior still uses the above logic.

For more detailed info, pls read TV strategy manual carefully,
blackcat1402 pureshred
@pureshred, for the part you mentioned "on line 34 and line 36 remove the -1 from bar_index-1 for an adequate fix. Or bar_index+1 to match the strategy label position.", I agree with you, i will update it accordingly.
+2 Antworten
thank you, great indicator. but it can show two same signals. for example "sell" after "sell"