Adaptive Zero Lag EMA v2

This is my most successful strategy to date! Please enjoy and join the Open Source movement by sharing your code and ideas online!

The strategy is based on Ehlers idea that any indicator can be turned into a signal-producing trade system through smoothing and other filtering processes.
In fact, I'm using his Zero Lag EMA ( ZLEMA ) as a baseline indicator as well as some code snippets he has made public (1). God bless open source!
Next, I've provided the option to use an Instantaneous Frequency Measurement (IFM) method, which will adaptively choose the best period for the ZLEMA (2)
I've written other studies that use the differential calculus approximations for IFM, so it was only natural to include them in this strategy.
The primary two are Cosine IFM (3) and In-phase Quadrature IFM (4). You can also find an indicator with both plotted and the ability to average them together, as one IFM prefers long periods and the other short. (5)

1. This strategy only runs on "normal" FX pairs ( EURUSD , GBPJPY , AUDUSD ...) and will fail on Metals or Commodities .
Cryptos are largely untested.
2. Please run it on these time frames: M15 to D.
Anything outside this range will likely fail.

1. If the Default settings don't produce good results right off the bat, then lower gain limit to 1 or 2 and threshold to 0. 01 .
2. Test each setting under adaptive method. If you want to leave it Off, then I'd recommend using some kind of IFM (see my links below) to
discover the most efficient period to use.
3. Once you have the best adaptive method chosen, begin incrementing gain limit until you find a nice balance between profit factor ( PF ) and drawdown.
4. Now, begin incrementing threshold. The goal is to have PF above 2 and a drawdown as low as possible.
5. Finally, change the source! Typically, close is the best option, but I have run into cases where high
yielded the highest returns and win rate.
6. Sit back, relax, and tweak the risk until you're happy with the return and drawdown amounts.

You may need to adjust take profit (TP) points and stop loss (SL) points to create the best entry possible. Don't be greedy! You'll likely have poor
results if the TP is set to 300 and SL is 50.
If you are trading a pair that has a long Dominant Cycle Period, then you may increase Max Period to allow the IFM
to accept longer periods. Any period above the Max Period will be rejected. This may increase lag time!

Cheers and good luck trading!

PS - This code doesn't repaint or have future-leak, which was present in Pinescript v2.
PPS - Believe me! These returns are typical! Sometimes you must push aside the "if it's too good to be true..." mindset that society has ingrained in you.
Do you really believe the most successful pass up opportunities before investigating them? ;)

(1)Ehlers & Ric Zero Lag EMA
(2)Measuring Cycles by Ehlers
(3)Cosine IFM
(4)Inphase Quadrature IFM
(5)Averaging IFM
Release Notes: Now with Cryptocurrencies, Metal Spots, and Custom trade settings!
-> You're able to set a custom # of contracts to trade if required.
-> Simply set the Security Type to Custom!

Better Default settings!

Please note, if SL Points is less than your slippage, trades will exit immediately.
I encourage you to make testing conditions realistic & make sure SL points is greater than slippage!
Release Notes: Now able to set the max allowed lot size!
Many brokers set a hard limit at 100 Standard lots per trade for currency pairs and 30 standard lots for cryptocurrency pairs.
Open-source script

In true TradingView spirit, the author of this script has published it open-source, so traders can understand and verify it. Cheers to the author! You may use it for free, but reuse of this code in a publication is governed by House Rules. You can favorite it to use it on a chart.

Want to use this script on a chart?


Where did you come from? Your work is amazing. Well done. Through the ten scripts you've published you've demonstrated that you're an asset to the TV community.

I don't want to sound like a lazy, ungrateful s***, but do you think you could throw up a study version of this script?

Again, amazing work man.
+3 Reply
EmpiricalFX overttherainbow
@overttherainbow, Thank you that means a lot! I can upload an indicator version too, but you won't know if the settings are right unless you test it with the strategy ;)
+1 Reply
EmpiricalFX overttherainbow
nilux EmpiricalFX
@EmpiricalFX, great work!
Awesome man. Thanks a lot. I automated and linked to my broker & earning profits. Soon will come to you to pay my gratitude.
This strategy is killer. Thank you!
Hey! First off - thank you for sharing the source on this! Awesome work.
Second - An added alert using this strategy generates several alerts for each order. I can imagine why since the order is set on cossover and the intra-bar calculations could make a crossover more than once per bar. But how to make use of this in a correct way? Should you always place the order if you just recieve one alert? And since this script is using risk (great job on that aswell), how do I make sure not to make several "fake" orders within one bar? I have a setup to automate it but it behaves according to alerts. So it places an order of each alert - which could end up being very dangerous.
I cannot find the way to start testing your strategy with crypto. I am using BTCUSDT with the default configuration, using all available data points from Tradingview, but I only see 1 deal closed
What is the suggested setup for such crypto?
currently trying to automate this strategy and was wondering if you could help?
Home Stock Screener Forex Screener Crypto Screener Economic Calendar About Chart Features Pricing Refer a friend House Rules Help Center Website & Broker Solutions Widgets Charting Solutions Lightweight Charting Library Blog & News Twitter
Profile Profile Settings Account and Billing Referred friends Coins My Support Tickets Help Center Private Messages Chat Sign Out