Description
The Ehlers Filter uses a non-linear distance calculation algorithm. This indicator enables tracking the common trend and trading in its direction. Unlike the linear Ehlers Filter, it has a shorter delay and allows for more accurate detection of entry and exit points for your positions.
The indicator allows for tracking the common trend and trading in its direction.
You can find the Ehlers Linear Filter indicator here: ctrader.com/algos/indicators/show/3462
using System;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo
{
[Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
public class mEhlersFilterNonlinear : Indicator
{
[Parameter("Period (13)", DefaultValue = 13, MinValue = 2)]
public int inpPeriod { get; set; }
[Parameter("Momentum (5)", DefaultValue = 5, MinValue = 2)]
public int inpMomentum { get; set; }
[Parameter("Data Source (close)", DefaultValue = enumPriceTypes.Close)]
public enumPriceTypes inpPriceType { get; set; }
[Output("Ehlers Filter Nonlinear", LineColor = "DodgerBlue", PlotType = PlotType.Line, LineStyle = LineStyle.Solid, Thickness = 2)]
public IndicatorDataSeries outElhersFilterNonLinear { get; set; }
private IndicatorDataSeries _price, _delta, _coeff, _coeffprice, _efnl;
private MovingAverage _smoothcoeff, _smoothcoeffprice;
protected override void Initialize()
{
_price = CreateDataSeries();
_delta = CreateDataSeries();
_coeff = CreateDataSeries();
_coeffprice = CreateDataSeries();
_efnl = CreateDataSeries();
_smoothcoeff = Indicators.MovingAverage(_coeff, inpPeriod, MovingAverageType.Simple);
_smoothcoeffprice = Indicators.MovingAverage(_coeffprice, inpPeriod, MovingAverageType.Simple);
}
public override void Calculate(int i)
{
switch(inpPriceType)
{
case enumPriceTypes.Open:
_price[i] = Bars.OpenPrices[i];
break;
case enumPriceTypes.Close:
_price[i] = Bars.ClosePrices[i];
break;
case enumPriceTypes.High:
_price[i] = Bars.HighPrices[i];
break;
case enumPriceTypes.Low:
_price[i] = Bars.LowPrices[i];
break;
case enumPriceTypes.Median:
_price[i] = Bars.MedianPrices[i];
break;
case enumPriceTypes.Typical:
_price[i] = Bars.TypicalPrices[i];
break;
case enumPriceTypes.Weighted:
_price[i] = Bars.WeightedPrices[i];
break;
default:
_price[i] = Bars.ClosePrices[i];
break;
}
_delta[i] = i>inpMomentum ? _price[i] - _price[i-inpMomentum] : _price[i] - ((Bars.TypicalPrices[i] + Bars.WeightedPrices[i]) / 2);
_coeff[i] = _delta[i] * _delta[i];
_coeffprice[i] = _coeff[i] * _price[i];
_efnl[i] = _smoothcoeffprice.Result[i] / (_smoothcoeff.Result[i] != 0 ? _smoothcoeff.Result[i] : 1);
outElhersFilterNonLinear[i] = _efnl[i];
}
}
public enum enumPriceTypes
{
Open,
Close,
High,
Low,
Median,
Typical,
Weighted
}
}
mfejza
Joined on 25.01.2022
- Distribution: Free
- Language: C#
- Trading platform: cTrader Automate
- File name: mEhlersFilterNonlinear.algo
- Rating: 5
- Installs: 378
- Modified: 07/06/2023 13:09
Note that publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section, please use the Copyright Infringement Notification form to submit a claim.
Comments
Log in to add a comment.
No comments found.