Back

Help with Crossover Filter

Hi Everyone,

I'm pretty new at this, but attempting to do a fine filter on the RSI indicator. Specifically, I'm looking to do a crossover from one day (or bar) to the next. I'm having trouble finding any examples of how to do this. I could do this manually after other filters, but I was wondering if anyone knows a C# way of tackling this one in a fine filter.

If I should be taking another approach, I'm up for other ideas too.

Thanks in advance,

Robert

Update Backtest







0

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


Hi superbobrot,
In the docs and in the open-source project, the EmaCrossUniverseSelectionAlgorithm is our best example on how to use indicators with universe selection. Basically, we create a dictionary keyed by the security symbol to save objects that include indicator(s), update the indicators with the closing price and select the universe based on criteria that use the indicators.
I have changed that algorithm to use RSI cross instead because I wanted to show how to use the Indicator Extension Of with the Delay indicator to make a comparison with current and past values of an indicator.

private class SelectionData
{
private readonly RelativeStrengthIndex _present;
private readonly Delay _past;
public bool IsCrossUp => _past.IsReady && _past < 30 && _present > 30;

public SelectionData()
{
_present = new RelativeStrengthIndex(14);
_past = new Delay(1);
_past.Of(_present);
}

public bool Update(DateTime time, decimal value)
{
_present.Update(time, value);
return _past.IsReady;
}
}

We can see that _past is a delay of a RSI (_past.Of(_present);) and we just need to update _present (see Update method) to update both indicators.
Finally, we define the IsCrossUp member with the criteria that defines a cross from below to above a threshold.

Please find a full working algorithm below.

0

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


Alexandre,

Thank you for taking the time to put this together. I've read about the extension methods of the indicators, but I'll admit that it would have taken me some time to arrive at this solution. Previously, I'd used the RollingWindow for just 2 days, but hadn't yet gotten to backtesting my algorithm quite yet. This solution is much more elegant. Hopefully I can get used to the framework of how the indicators are put together soon!

Robert

 

0

Hi Robert,
My goal with this example is to show a different approach since, in fact, we advise community members to use rolling windows because it is a general solution.

0

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


Update Backtest





0

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


Loading...

This discussion is closed