Hi ! The code builds, but I'm getting a Runtime error during the backtest, it says : 

Runtime Error: Value cannot be null.  Parameter name: key (Open Stacktrace)

 

namespace QuantConnect.Algorithm.CSharp
{

public class MultipleCrypto : QCAlgorithm
{
// Define variable
// USER VARIABLES
private int startingCash = 2000;
private int maxPosition = 1000;
private int minPosition = 500;

Resolution res = Resolution.Hour;

int fastPeriod = 12;
int slowPeriod =26;
int sigPeriod = 9;
public decimal usd;

Dictionary <string,SymbolData> Data = new Dictionary <string,SymbolData>();

List <string> CryptoSymbols = new List<string>
{
"BTCUSD",
"ETHUSD",
"LTCUSD"
};
int numberOfSymbols => CryptoSymbols.Count;


// INITIALIZE
public override void Initialize()
{
SetStartDate(2017, 1, 1);
SetEndDate(2018, 1, 1);
SetCash(startingCash);

foreach (var symbol in CryptoSymbols) // adds each crypto to the Dictionary Data
{
var crypto = AddCrypto(symbol, res);
Data.Add(symbol, new SymbolData(crypto.Symbol, crypto.BaseCurrencySymbol));
}

foreach (var key in Data) // assign the Macd to the symbol
{
var symbolData = key.Value;
symbolData.Macd = MACD(symbolData.Symbol, fastPeriod, slowPeriod, sigPeriod, MovingAverageType.Exponential, res);
}

SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash);

}

public override void OnData(Slice data)
{
foreach(var symbolData in Data.Values)
{
if(!symbolData.Macd.IsReady) {return;}
if (symbolData.Macd.IsReady)
{
usd = Portfolio.CashBook["USD"].Amount;

if(!Portfolio[symbolData.Symbol].Invested && usd > minPosition)
{
if (symbolData.Macd.Fast > symbolData.Macd.Slow)
{
decimal quantity = Math.Round(Math.Min( usd/numberOfSymbols, maxPosition) / data[symbolData.Symbol].Price, 2);
MarketOrder(symbolData.Symbol, quantity);
}
}
if(Portfolio[symbolData.Symbol].Invested)
{
var holding = Portfolio.CashBook[symbolData.BaseSymbol].Amount;
if (symbolData.Macd.Fast < symbolData.Macd.Slow)
{
MarketOrder(symbolData.Symbol, -holding);
}
}
}
}

}
public class SymbolData
{
public Symbol Symbol;
public string BaseSymbol;
public MovingAverageConvergenceDivergence Macd;
public SymbolData(Symbol symbol, string BaseSymbol)
{
Symbol = symbol;
BaseSymbol = BaseSymbol;
}
}
}
}