I may have this figured out. When AddUniverse(CoarseSelectionFunction,FineSelectionFunction is called in Initialization(). the two filter functions are registered, but the universe is NOT created immediately. The universe management data structure is populated later execution exits Initialization(). As a result, you cannot access universe.Members.Keys in Initialization().
The following shows a work around. They are pieces of my code with editing. (I have less than a month experience with C# and Quantconnect, so excuse me if something does not look normal);
public override void Initialize()
{
//code removed
AddUniverse(CoarseSelectionFunction, FineSelectionFunction);
}
public void InitializationPart2()
{
// Use UniverseManager to find symbols from the Universe Selection
foreach (var universe in UniverseManager.Values)
{
if (universe is UserDefinedUniverse)
{
continue;
}
List<Symbol> symbols = new List<Symbol> (universe.Members.Keys);
Debug(string.Join(", ",symbols.Select(x => x.Value.ToString())));
foreach (Symbol symbol in symbols)
{
//code removed
Debug(symbol.Value);
/code removed
}
}
}
bool firstTimeCallOnData=true;
public void OnData(TradeBars data)
{
if (firstTimeCallOnData) InitializationPart2();
firstTimeCallOnData=false;
}