| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
namespace QuantConnect.Algorithm.CSharp
{
public class NadionModulatedSplitter : QCAlgorithm
{
private Dictionary<Symbol, decimal> dollarVolumeBySymbol;
private int lastMonth;
private int numberOfSymbolsCoarse;
private int numberOfSymbolsFine;
public override void Initialize()
{
SetStartDate(2018, 10, 29); //Set Start Date
SetCash(100000); //Set Strategy Cash
dollarVolumeBySymbol = new Dictionary<Symbol, decimal>();
lastMonth = -1;
numberOfSymbolsCoarse = 300;
numberOfSymbolsFine = 5;
AddUniverseSelection(new FineFundamentalUniverseSelectionModel(SelectCoarse, SelectFine));
}
public override void OnData(Slice data)
{
}
private IEnumerable<Symbol> SelectCoarse(IEnumerable<CoarseFundamental> coarse){
if (Time.Month == lastMonth){
return Universe.Unchanged;
}
var sortedByDollarVolume = (from x in coarse
where x.HasFundamentalData && x.Volume > 0 && x.Price > 0
orderby x.DollarVolume descending
select x).Take(numberOfSymbolsCoarse);
List<Symbol> symbols = new List<Symbol>();
dollarVolumeBySymbol = new Dictionary<Symbol, decimal>();
foreach (var x in sortedByDollarVolume){
symbols.Add(x.Symbol);
dollarVolumeBySymbol[x.Symbol]=x.DollarVolume;
}
return symbols;
}
private IEnumerable<Symbol> SelectFine(IEnumerable<FineFundamental> fine){
if (Time.Month == lastMonth){
return Universe.Unchanged;
}
lastMonth = Time.Month;
var filteredFine = fine.Where(x => x.AssetClassification.MorningstarIndustryGroupCode == MorningstarIndustryGroupCode.Banks);
IEnumerable<Symbol> selected = filteredFine.OrderByDescending(x => dollarVolumeBySymbol[x.Symbol]).Select(x => x.Symbol).Take(numberOfSymbolsFine);
return selected;
}
}
}