Hello,
I am having troubles making the RateOfChange object work correctly in my classic algorithm. I have tried creating a 'new RateOfChange' object, as well as using ROC(...). Both seem to be return 0's at all times, so I'm not sure if I'm using them incorrectly? I am calling these functions in the OnData method, but it seems like the date of these RateOfChange objects is always showing 01-01-0001? I'll include a complete snippet of my algorithm here.
namespace QuantConnect.Algorithm.CSharp
{
/// <summary>
/// Basic template algorithm simply initializes the date range and cash. This is a skeleton
/// framework you can use for designing an algorithm.
/// </summary>
public class BasicTemplateAlgorithm : QCAlgorithm
{
private const int LOOKBACK = 252;
private const Resolution RESOLUTION = Resolution.Daily;
private Symbol[] _symbols;
/// <summary>
/// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
/// </summary>
public override void Initialize()
{
SetStartDate(2018, 1, 1); //Set Start Date
SetEndDate(2018, 8, 1); //Set End Date
SetCash(20000); //Set Strategy Cash
// The ordering of these symbols matter for portfolio construction.
// The last symbol should be the 'cash'/bonds fall back.
_symbols = new[] {
QuantConnect.Symbol.Create("AAPL", SecurityType.Equity, Market.USA),
QuantConnect.Symbol.Create("MSFT", SecurityType.Equity, Market.USA),
QuantConnect.Symbol.Create("MA", SecurityType.Equity, Market.USA)
};
foreach(var symbol in _symbols)
{
AddEquity(symbol, RESOLUTION);
}
}
/// <summary>
/// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
/// </summary>
/// <param name="data">Slice object keyed by symbol containing the stock data</param>
public override void OnData(Slice data)
{
var stockRoc = _symbols.Select(s => new RateOfChange(s, LOOKBACK)).ToArray();
Debug(stockRoc[0].Current.Value + "," + stockRoc[1].Current.Value + "," + stockRoc[2].Current.Value);
}
}
}