| 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
{
public class BasicTemplateAlgorithm : QCAlgorithm
{
private bool _rebalenceFlag = true;
private bool _firstMonthTradeFlag = true;
private bool _reSelectUniverse = true;
private IEnumerable<Symbol> _symbols = Enumerable.Empty<Symbol>();
public override void Initialize()
{
SetStartDate(2013, 10, 07); //Set Start Date
SetEndDate(2013, 10, 11); //Set End Date
SetCash(100000); //Set Strategy Cash
AddUniverse(CoarseSelectionFunction, FineSelectionFunction);
}
public override void OnData(Slice data)
{
Log(string.Join(",", data.Keys));
}
public IEnumerable<Symbol> CoarseSelectionFunction(IEnumerable<CoarseFundamental> coarse)
{
if (_rebalenceFlag || _firstMonthTradeFlag)
{
// drop stocks which have no fundamental data or have too low prices
// order by dollar volumena and take the top 200
_symbols = coarse
.Where(x => x.HasFundamentalData)
.Where(x => x.Price > 5)
.OrderByDescending(x => x.DollarVolume)
.Select(x => x.Symbol)
.Take(200);
}
return _symbols;
}
public IEnumerable<Symbol> FineSelectionFunction(IEnumerable<FineFundamental> fine)
{
if (_reSelectUniverse)
{
_symbols = fine
.Where(x => x.SecurityReference.SecurityType == "ST00000001")
.Where(x => x.SecurityReference.IsPrimaryShare)
.Where(x => x.ValuationRatios.EVToEBITDA > 0)
.Where(x => x.EarningReports.BasicAverageShares.ThreeMonths > 0)
.Where(x =>
{
var averageShares = x.EarningReports.BasicAverageShares.ThreeMonths;
var history = History(x.Symbol, 1, Resolution.Daily);
var close = history.FirstOrDefault()?.Close;
// If history is empty, close will be null
// In this case, we will not consider the security
if (close == null)
{
return false;
}
return averageShares * close > 2 * 1000 * 1000 * 1000;
})
.OrderByDescending(x => x.ValuationRatios.EVToEBITDA)
.Select(x => x.Symbol);
}
return _symbols;
}
}
}